Úvod do Tkinter - Okna pro jazyk Python - Postavené na základech 'An Introduction to Tkinter'

třída PhotoImage

Třída PhotoImage se používá na zobrazování obrázků a fotek (černobílých i barevných) na štítcích, tlačítkách, plátnech i textových udělátcích.

Kdy třídu PhotoImage použít

Kdykoliv potřebujte zobrazit ikonu nebo obrázek v Tkinter.

Pojetí

soubor GIF

photo = PhotoImage(file="image.gif") 

soubor PGM/PPM

photo = PhotoImage(file="lenna.pgm") 

řetězce GIF

Třída PhotoImage umí číst base64-kódované gif obrázky z řetězců. Této vlastnosti se dá využít k zabudování obrázků přímo do pythonovského kódu (použijte funkce z modulu base64 na konverzi binárních dat do base64-zakódovaného řetězce):

photo = """ 
R0lGODdhEAAQAIcAAAAAAAEBAQICAgMDAwQEBAUFBQYGBgcHBwgICAkJCQoKCgsLCwwMDA0NDQ4O 
Dg8PDxAQEBERERISEhMTExQUFBUVFRYWFhcXFxgYGBkZGRoaGhsbGxwcHB0dHR4eHh8fHyAgICEh 
... 
AfjHtq1bAP/i/gPwry4AAP/yAtj77x+Af4ABAwDwrzAAAP8SA/j3DwCAfwAA/JsM4J/lfwD+/QMA 
4B8AAP9Ci/4HoLTpfwD+qV4NoHVAADs= 
""" 
 
photo = PhotoImage(data=photo) 

další formáty

Pokud potřebujte pracovat s dalšími grafickými formáty, použijte Python Imaging Library (PIL), která umožňuje načítat až 30 formátů a převádět je Tkinterovský formát:

from PIL import Image, ImageTk 
 
image = Image.open("lenna.jpg") 
photo = ImageTk.PhotoImage(image) 

PhotoImage formát z PIL můžete použít všude, kde Tkinter očekává obrázek. Příklad::

label = Label(image=photo) 
label.pack() 
Poznámka 1: PhotoImage z PIL (z ImageTk) není PhotoImage z Tkinter přesto, že se stejně jmenují.

Poznámka 2: Protože instance PhotoImage se mohou dostat do rukou popeláři (garbage collector), například když se vracíte z funkce, kde byl obrázek uložen v lokální proměnné, může se obrázek vymazat, přestože je zobrazen některým tkinter udělátkem.

Pokud se tohoto nepříjemného chování chceme zbavit, musíme držet zvláštní referenci na obrázek. Snadná cesta, jak toho docílit, je přiřadit obrázek do atributu udělátka:

label = Label(image=photo) 
label.image = photo # podrž si referenci
label.pack()

Přeložil a upravil - Pavel Kosina - Copyright © 2006 TkinterCZ - GNU Free Documentation License 1.2