tkinter - Dialoge

Nachrichtendialoge

Nachrichtendialoge erzeugen

ret = mb.dialogtyp(title, message, option)

Es können folgende Dialogtypen verwendet werden und sie haben jeweils die folgenden Rückgabewerte:

DialogtypRückgabewert bei entsprechend gedrücktem Knopf
askokcancel"OK": True, "Abbrechen": False
askquestion"Ja": 'yes' "Nein": 'no'
askretrycancel"Widerholen": True, "Abbrechen": False
askyesno"Ja": True, "Nein": False
askyesnocancel"Ja" : True, "Nein": False, "Abbrechen": None
showerror"Ok": 'ok'
showinfo"Ok": 'ok'
showwarning"Ok": 'ok'

Nachrichtendialoge kennen die Optionen:

OptionMögliche WerteBemerkung
defaultmb.CANCEL, mb.IGNORE, mb.NO, mb,OK, mb.RETRY oder mb.YESAktivierter Knopf bei Dialogen
iconmb.ERROR, mb.INFO, mb.QUESTION oder mb.WARNINGDieses Bild wird angezeigt

Das folgende Programm erzeugt der Reihe nach alle Dialoge aus der obige Auswahl und schreibt die jeweiligen Rückgabewerte auf die Konsole:

Bild der Anwendung
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox as mb

class A(tk.Tk):
    def __init__(self):
        super().__init__()
        self.geometry('400x400')
        self._createWidgets()
        self._runMessages()

    def _createWidgets(self):
        pass

    def _runMessages(self):
        ret = mb.askokcancel('askokcancel', 'Wollen Sie abbrechen?', default=mb.CANCEL)
        print('askokcancel, Return Value:', ret)
        ret = mb.askquestion('askquestion', 'Darf ich Ihnen eine Frage stellen?')
        print('askquestion, Return Value:', ret)
        ret = mb.askretrycancel('askretrycancel', 'Nochmal versuchen?')
        print('askretrycancel, Return Value:', ret)
        ret = mb.askyesno('askyesno', 'Ja oder Nein?')
        print('askyesno, Return Value:', ret)
        ret = mb.askyesnocancel('askyesnocancel', 'Ja-Nö-Vielleicht')
        print('askyesnocancel, Return Value:', ret)
        ret = mb.showerror('showerror', 'Oh, ein Fehler!')
        print('showerror, Return Value:', ret)
        ret = mb.showinfo('showinfo', 'Dieses ist nur eine Information!')
        print('showinfo, Return Value:', ret)
        ret = mb.showwarning('showwarning', 'Dieses ist eine Warnung!')
        print('showwarning, Return Value:', ret)

if __name__ == '__main__':
    window = A()
    window.mainloop()

Dateidialoge

Dateidialoge erzeugen

ret = fd.dialogtyp(optionen)

Es werden u.a. die folgenden Dateidialoge unterstützt:

DateidialogtypBeschreibung
fd.askdirectory(optionen)Es wird nach einem existierenden Verzeichnis gefragt, der Verzeichnispfad wird zurückgeliefert
fd.askopenfilename(optionen)Es wird nach einer Datei gefragt, der Dateiname wird zurückgeliefert
fd.askopenfilenames(optionen)Es wird nach (mehreren) Dateien gefragt. Gibt eine Liste von Dateinamen zurück. Gleicher Effekt, wie mit fd.askopenfilename(…) und gesetzter Option multiple
fd.asksaveasfilename(optionen)Standarddialog zum Speichern einer Datei. Es wird beim Versuch, eine Datei zu überschreiben, nachgefragt.

Dateidialoge kennen die folgenden Optionen:

OptionBemerkung
defaultextension(nur fd.asksaveasfilename(…)) Dateinamenserweiterung wie .txt, die an Dateien ohne Erweiterung angehängt wird. Kein Effekt bei Dateien, die selber einen Punkt "." beinhalten
filetypesListe von Dateitypen der Form: [(TYPNAME, MUSTER), …], auch mit Wildcard. Schränkt Suchergebnisse ein.
initialdirAnfangsverzeichnis
initialfileAnfangsdateiname
multiple'true': mehrere Items können gleichzeitig ausgewählt werden, (nur fd.askopenfilename(…)
parentParent-Fenster, über dem der Dialog dargestellt wird
titleTitel

Das folgende Programm erzeugt der Reihe nach die Dialoge aus der obige Auswahl und schreibt die jeweiligen Rückgabewerte auf die Konsole:

Bild der Anwendung
import tkinter as tk
from tkinter import ttk
from tkinter import filedialog as fd

class A(tk.Tk):
    def __init__(self):
        super().__init__()
        self.geometry('400x400')
        self._createWidgets()
        self._runFiledialoges()

    def _createWidgets(self):
        pass

    def _runFiledialoges(self):
        dirname = fd.askdirectory(title='Such dir ein Verzeichnis aus')
        print('askdirectory:', dirname)

        filename = fd.askopenfilename(title='Öffne Bilddatei',
            filetypes=[('PNG', '*.png'),('JPG', '*.jpg')],
            multiple='true' )
        print('askopenfilename:', filename)

        filenames = fd.askopenfilenames(title='Viele Dateien zum Öffnen')
        print('askopenfilenames:', filenames)

        filename = fd.asksaveasfilename(title='Speichere eine Datei' )
        print('asksaveasfilename:', filename)

if __name__ == '__main__':
    window = A()
    window.mainloop()

Eingabedialoge

Eingabedialoge erzeugen

ret = sd.dialogtyp(ttiel, prompt, optionen)

Es werden u.a. die folgenden Eingabedialoge unterstützt:

EingabedialogetypBeschreibung
sd.askfloat (optionen)Fragt nach einer Fließkommazahl
sd.askinteger (optionen)Fragt nach einer ganzen Zahl
sd.askstring (optionen)Fragt nach einem String

Eingabedialoge kennen die folgenden Optionen:

OptionBemerkung
initialvalueAngabe eines Wertes, der voreingestellt angezeigt wird
minvalueKleinster erlaubter Wert (für Zahlendialoge)
maxvalueGrößter erlaubter Wert (für Zahlendialoge)
parentFenster, über dem der Dialog dargestellt werden soll. Diese Angabe sollte man machen, da sonst der Dialog oft hinter anderen Fenstern liegt.

Das folgende Programm erzeugt der Reihe nach die Dialoge aus der obige Auswahl und schreibt die jeweiligen Rückgabewerte auf die Konsole:

Bild der Anwendung
import tkinter as tk
from tkinter import ttk
from tkinter import simpledialog as sd

class A(tk.Tk):
    def __init__(self):
        super().__init__()
        self.geometry('400x400')
        self._createWidgets()
        self._runSimpleDialoges()

    def _createWidgets(self):
        pass

    def _runSimpleDialoges(self):
        a = sd.askfloat('Titel', 'Bitte eine Fließkommazahl eingeben:',
                        parent=self)
        b = sd.askinteger('Titel', 'Bitte eine ganze Zahl eingeben:',
                          parent=self)
        c = sd.askstring('Titel', 'Bitte etwas Text eingeben:',
                         parent=self)
        print(a, b, c)

        a = sd.askinteger('Titel',
                          'Test von Optionen', initialvalue=42,
                          minvalue=10, maxvalue=50, parent=self)
        print(a)

if __name__ == '__main__':
    window = A()
    window.mainloop()

Farbdialog

Farbdialog erzeugen

ret = c.askcolor(color=None, optionen)

Der Farbdialog kennt die folgenden Optionen:

OptionBemerkung
initialcolorZeigt diese Farbe im Dialog an. Der Funktionsparameter color hat Vorrang vor dieser Option
titleAngabe eines Wertes, der voreingestellt angezeigt wird
parentFenster, über dem der Dialog dargestellt werden soll. Diese Angabe sollte man machen, da sonst der Dialog oft hinter anderen Fenstern liegt.

Rückgabewert: Wird der Dialog über Cancel beendet ist der Rückgabewert (None, None), sonst ein Farbcode wie ((0, 128, 0), '#008000').

Das folgende Programm erzeugt einen Farbdialog und schreibt den Rückgabewerte auf die Konsole:

Bild der Anwendung
import tkinter as tk
from tkinter import ttk
from tkinter import colorchooser  as c

class A(tk.Tk):
    def __init__(self):
        super().__init__()
        self.geometry('400x400')
        self._createWidgets()
        self._runAskColor()

    def _createWidgets(self):
        pass

    def _runAskColor(self):
        ret = c.askcolor(color='red', parent=self)
        print(ret)

if __name__ == '__main__':
    window = A()
    window.mainloop()

Referenzen

Siehe Auch