Tkinter
Dialogy a okna se zprávou
Tkinter poskytuje řadu dialogových a informačních oken, které mohou být použity pro zobrazení zprávy, varování či chyby, jakož i widgety pro výběr souborů a barev. Existují také dialogová okna, žádající uživatele o zadání řetězce, celého nebo desetinného čísla.Pohleďme na typickou seanci GUI s dialogy a informačními okny. Můžeme začít tlačítkem, které dialog otevírá, jako je tlačítko "Quit" v následujícím okně:
Stisknutí tlačítka "quit" otevře ověřovací (verify) okno:
Předpokládejme, že chceme varovat uživatele, že tlačítko "quit" není ještě zavedeno. V tom případě můžeme použít varovnou zprávu pro uživatele, který stiskl tlačítko "yes":
Pokud někdo zvolí tlačítko "No", otevře se informační okno se sdělením "Quit has been cancelled":
Vraťme se zpátky k našemu prvnímu dialogu s tlačítky "quit" a "answer". Není-li funkcionalita volby "Answer" zavedena, mohlo by být užitečné použít následující okno se zprávou o chybě:
Všech pět dialogových oken vytvoří tento skriptík:
from tkinter import * from tkinter.messagebox import * def answer(): showerror("Answer", "Sorry, no answer available") def callback(): if askyesno('Verify', 'Really quit?'): showwarning('Yes', 'Not yet implemented') else: showinfo('No', 'Quit has been cancelled') Button(text='Quit', command=callback).pack(fill=X) Button(text='Answer', command=answer).pack(fill=X) mainloop()Zkuste si jednotlivá okénka opatřit českými texty.
Dialogová okna
Dialogová okna (message boxes) jsou poskytována modulem tkinter.messagebox, který je nutné importovat.Modul tkinter.messagebox obsahuje následující funkce, které odpovídají jednotlivým dialogovým oknům:
- askokcancel(title=None, message=None, **options)
Ptát se, má-li operace pokračovat; vrátit True, je-li odpověď OK. - askquestion(title=None, message=None, **options)
Položit otázku. - askretrycancel(title=None, message=None, **options)
Ptát se, má-li být operace opakována; vrátit True, je-li odpověď YES - askyesno(title=None, message=None, **options)
Položit otázku; vrátit True, je-li odpověď YES - askyesnocancel(title=None, message=None, **options)
Položit otázku; vrátit True, je-li odpověď YES, vrátit None, je-li odpověď "Cancel" - showerror(title=None, message=None, **options)
Zobrazit chybovou zprávu - showinfo(title=None, message=None, **options)
Zobrazit informaci - showwarning(title=None, message=None, **options)
Zobrazit varování
V následující ukázce uvidíme evokaci dialogového okna změnou zatržítka prostřednictvím kontrolní proměnné:
from tkinter import* from tkinter.messagebox import* root = Tk() cbox_val = IntVar() # The control variable def cbox_clicked(): if cbox_val.get() == 1: showinfo('HAL9000', 'evil module disabled') else: showwarning('HAL9000', 'evil module enabled') cbox = Checkbutton(root, text='Disable homicidal computer', variable=cbox_val, command=cbox_clicked) cbox.pack() root.mainloop()
Dialog pro otevření souboru
Sotva existuje seriozní aplikace, která nepotřebuje číst ze souboru nebo do souboru zapisovat. Navíc taková aplikace může potřebovat výběr adresáře. Pro tyto účely má Tkinter k disposici modul tkinter.filedialog.from tkinter import * from tkinter.filedialog import askopenfilename def callback(): name= askopenfilename() print (name) errmsg = 'Error!' Button(text='Open', command=callback).pack(fill=X) mainloop()
Výše uvedený kód vytvoří okno s jediným tlačítkem a nápisem "Open". Je-li tlačítko stlačeno, objeví se následující okno:
Vzhled dialogu "open" závisí na GUI operačního systému. Uvedený příklad byl vytvořen s použitím prostředí gnome v Linuxovém desktopu. Spustíme-li stejný program ve Windows 7, vypadá takto:
Výběr barvy
Jsou aplikace, ve kterých má mít uživatel možnost výběru různých barev. Tkinter poskytuje vyskakovací (pop-up) menu pro výběr barvy. Za tímto účelem musíme importovat modul tkinter.colorchooser a použít metodu askcolor:result = tkintercolorchooser.askcolor ( color, option=value, ...)Stiskne-li uživatel tlačítko OK, vrátí metoda askcolor() dvojici hodnot, které jsou obě prezentací vybrané barvy, např. ((106, 150, 98), '#6a9662')
První hodnotou je entice (R,G,B) prezentující podíly RGB v dekadických číslech od 0 do 255. Druhou hodnotou je hexadecimální prezentace vybrané barvy.
Stiskne-li uživatel "Cancel", vrátí metoda entici (None,None).
Klíčové (keyword) parametry jsou:
color | Tato proměnná se použije pro určení implicitní zobrazované barvy. Není-li barva určena, je počáteční barvou šedá. |
title | Text, přiřazený proměnné "title", se objeví v záhlaví vyskakovacího okna. Implicitní název je "Color". |
parent | Určí okno, nad kterým se vyskakovací okno objeví. Implicitně se objeví nad kořenovým oknem. |
Podívejme se na příklad:
from tkinter import * from tkinter.colorchooser import askcolor def callback(): result = askcolor(color="#6A9662", title = "Bernd's Colour Chooser") print (result) root = Tk() Button(root, text='Choose Color', fg="darkgreen", command=callback).pack(side=LEFT, padx=10) Button(text='Quit', command=root.quit, fg="red").pack(side=LEFT, padx=10) mainloop()Vzhled závisí na operačním systému (Linux či Windows) a na zvoleném GUI (GNOME, KDE a pod). Následující okno se vynoří, použijete-li Gnome:
Použití totožného skriptu ve Windows 7 dává následující výsledek: