Grafische Benutzeroberflächen FAQ¶
Allgemeine GUI-Fragen¶
Welche GUI-Toolkits gibt es für Python?¶
Standard-Builds von Python enthalten eine objektorientierte Schnittstelle zum Tcl/Tk-Widget-Set, genannt tkinter. Dies ist wahrscheinlich am einfachsten zu installieren (da es mit den meisten Binärdistributionen von Python mitgeliefert wird) und zu verwenden. Weitere Informationen zu Tk, einschließlich Verweise auf den Quellcode, finden Sie auf der Tcl/Tk-Homepage. Tcl/Tk ist vollständig portierbar auf die macOS-, Windows- und Unix-Plattformen.
Abhängig davon, welche Plattformen Sie ansprechen möchten, gibt es auch mehrere Alternativen. Eine Liste plattformübergreifender und plattformspezifischer GUI-Frameworks finden Sie im Python-Wiki.
Tkinter-Fragen¶
Wie friere ich Tkinter-Anwendungen ein?¶
Freeze ist ein Werkzeug zur Erstellung eigenständiger Anwendungen. Beim Einfrieren von Tkinter-Anwendungen sind die Anwendungen nicht wirklich eigenständig, da die Anwendung weiterhin die Tcl- und Tk-Bibliotheken benötigt.
Eine Lösung besteht darin, die Anwendung mit den Tcl- und Tk-Bibliotheken zu versenden und zur Laufzeit mit den Umgebungsvariablen TCL_LIBRARY und TK_LIBRARY darauf zu verweisen.
Verschiedene Drittanbieter-Freeze-Bibliotheken wie py2exe und cx_Freeze verfügen über integrierte Unterstützung für Tkinter-Anwendungen.
Kann ich Tk-Ereignisse behandeln, während ich auf E/A warte?¶
Auf anderen Plattformen als Windows ja, und Sie benötigen nicht einmal Threads! Aber Sie müssen Ihren E/A-Code etwas umstrukturieren. Tk hat das Äquivalent zum Xt-Aufruf XtAddInput(), der es Ihnen ermöglicht, eine Callback-Funktion zu registrieren, die von der Tk-Mainloop aufgerufen wird, wenn E/A auf einem Dateideskriptor möglich ist. Siehe Datei-Handler.
Ich kann Tastenbindungen in Tkinter nicht zum Laufen bringen: Warum?¶
Eine häufig gehörte Beschwerde ist, dass Ereignisbehandlungsroutinen, die mit der bind()-Methode an Ereignisse gebunden sind, nicht behandelt werden, auch wenn die entsprechende Taste gedrückt wird.
Die häufigste Ursache ist, dass das Widget, auf das sich die Bindung bezieht, keinen "Fokus" hat. Überprüfen Sie die Tk-Dokumentation für den focus-Befehl. Normalerweise erhält ein Widget den Tastaturfokus, indem man darauf klickt (aber nicht für Labels; siehe die takefocus-Option).