Dialoge und Meldungen (Message Boxes)


Einführung

Dialoge 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:

Fenster mit quit-Button und Antwort-Knopf

Klickt man auf den "quit"-Button wird ein Verify-Fenster gestartet:

Verify-Fenster

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:

Warning-Dialog

Falls jemand den "No"-Button drückt, erscheint die "Cancel"-Meldung:

Tkinter-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:

Fehlermeldung in Tkinter


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:

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:

Dateiauswahl

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:

Dateiauswahl unter Windows 7

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:

Choosing a Colour Startmenu

Choosing a Colour with Tkinter and Python

Falls wir das gleiche Programm unter Windows 7 starten, schaut es wie folgt aus:
Choosing a Colour the Windows 7 way