Dialoge und Meldungen (Message Boxes)
Einführung
Tkinter (und natürlich auch TK) stellen eine Menge von Dialoge zur Verfügung, die dazu genutzt werden können, dass im Ablauf der Ablikation Meldungen erzeugt werden (message boxes), die über Warnungen oder Fehler informieren, aber auch Fenster mit den ein Benutzer Dateien, Verzeichnisse oder Farben auswählen kann. Außerdem gibt es Dialoge, mit denen es möglich ist Strings, ganze Zahlen oder Fließkommazahlen einzulesen.Schauen wir uns einmal den typischen GUI-gesteuerten Ablauf mit Dialogen und Meldungen an. Möglicherweise haben wir einen Button, mit dem wir einen dialog starten. Dies könnte zum Beispiel der "quit"-Button im folgenden Fenster sein:
Klickt man auf den "quit"-Button wird ein Verify-Fenster gestartet:
Nehmen wir an, dass wir die Benutzer warnen wollen, dass die "Quit"-Funktionalität noch nicht implementiert ist. In diesem Fall können wir die "warning"-Meldung verwenden:
Falls jemand den "No"-Button drückt, erscheint die "Cancel"-Meldung:
Kommen wir zurück auf unseren ersten Dialog mit dem "quit" und dem "answer"-Buttons. Falls die "Answer"-Funktionalität noch nicht implementiert ist, könnte es sinnvoll sein die folgende Fehlermeldung erscheinen zu lassen:
Python-Skript, dass alle vorigen Dialoge implementiert:
from Tkinter import * from tkMessageBox 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()
Meldungen (Message Boxes)
Die Meldungen in Tkinter werden mit dem tkMessageBox-Module zur Verfügung gestellt.tkMessageBox besteht aus den folgenden Funktionen, die den Dialog-Fenstern entsprechen:
- askokcancel(title=None, message=None, **options)
Fragt nach mit "OK" und "cancel", ob eine Aktion weiter durchgeführt werden soll; liefert "true" zurück falls "OK" geklickt wird, sonst (cancel) wird false zurückgeliefert. - askquestion(title=None, message=None, **options)
Stellt eine Frage - askretrycancel(title=None, message=None, **options)
Fragt mit "YES" und "CANCEL" nach, ob eine Aktion weiter nochmals versucht werden soll. Liefert "true" zurück falls "YES" geklickt wird, sonst (cancel) wird false zurückgeliefert. - askyesno(title=None, message=None, **options)
Fragt nach mit "YES" und "NO".Liefert "true" zurück falls "YES" geklickt wird, false bei Cklick auf "NO". - askyesnocancel(title=None, message=None, **options)
Fragt nach mit "YES", "NO" und "CANCEL". Liefert "true" zurück falls "YES" geklickt wird, "false" bei Cklick auf "NO" und "None" bei Klick auf "CANCEL" - showerror(title=None, message=None, **options)
Erzeugt ein Fenster mit Fehlermeldung - showinfo(title=None, message=None, **options)
Erzeugt eine Info-Meldung - showwarning(title=None, message=None, **options)
Erzeugt eine Warnung
Dialog zum Öffnen einer Datei / Open File Dialogue
Es gibt wohl kaum eine ernsthafte Anwendung, die nicht in irgendeiner Form aus einer Datei liest oder in eine Datei schreibt. Außderdem ist es häufig auch nötig, dass der Nutzer ein Verzeichnis auswählen muss. Für diese Zwecke stellt Tkinter das Modul tkFileDialog zur Verfügung.from Tkinter import * from tkFileDialog import askopenfilename def callback(): name= askopenfilename() print name errmsg = 'Error!' Button(text='File Open', command=callback).pack(fill=X) mainloop()
Der obige Code erzeugt ein Fenster mit einem einzigen Button, der den Text "File Open" enthält. Wird der Button gedrückt, erscheint das folgende Fenster:
Das Aussehen des file-open-Dialogs hängt von der GUI des verwendeten Betriebssystemes ab. Das obige Beispiel wurde unter Linux als Betriebssystem und Gnome als Desktop erzeugt. Falls wir das gleiche Programm unter Windows 7 starten, schaut es wie folgt aus:
Farbauswahl
Es gibt Applikationen, in denen es nötig oder sinnvoll ist, dass ein Benutzer eine oder mehrere Farben auswählen muss. Natürlich bietet Tkinter hierzu auch eine fertige Methode. Das tkColorChooser-Module bietet die Methode askColor:result = tkColorChooser.askColor ( color, option=value, ...)Klickt der Benutzer den OK-Button im Pop-up-Fenster, liefert die Methode askColor() ein Tupel mit zwei Elementen als Return-Wert, ((106, 150, 98), '#6a9662')
Das erste Element des Tupels return[0] ist seinerseits ein tuple (R, G, B) mit der ausgewählten Farbe in RGB-Notation in Dezimalwerten zwischen 0 und 255. Das zweite Element return[1] ist die hexadezimale Darstellung der ausgewählten Farbe.
Klickt der User auf "Cancel" liefert die Methode das Tupel (None, None) zurück.
Die optionalen Parameter sind:
color | Mit dem optionalen Paramater "color" kann man die Default-Farbe auswählen. Defaultwert ist grau. |
title | Enthält den Text, der im Pop-up-Fenster als Titel erscheint. Der Default-Wert ist "Color". |
parent | Das Pop-up-Fenster soll über dem Fenster W erscheinen. Per Default erscheint es über dem root-Fenster. |
Noch ein einfaches Beispiel:
from Tkinter import * from tkColorChooser 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()Auch hier hängt das Look-and_Feel wieder vom Betirebssystem und vom verwendeten Desktop ab. Aussehen unter Linux mit Gnome:
Falls wir das gleiche Programm unter Windows 7 starten, schaut es wie folgt aus: