Vanliga frågor om grafiska användargränssnitt¶
Allmänna GUI-frågor¶
Vilka GUI-verktygssatser finns för Python?¶
Standardversioner av Python innehåller ett objektorienterat gränssnitt till Tcl/Tk:s widgetuppsättning, kallat tkinter. Detta är förmodligen det enklaste att installera (eftersom det ingår i de flesta binärdistributioner av Python) och använda. För mer information om Tk, inklusive pekare till källan, se Tcl/Tk-webbplatsen. Tcl/Tk är fullt portabelt till macOS-, Windows- och Unix-plattformarna.
Beroende på vilken eller vilka plattformar du siktar på finns det också flera alternativ. En lista över plattformsoberoende och plattformsspecifika GUI-ramverk finns på pythonwikin.
Frågor om Tkinter¶
Hur fryser jag Tkinter-applikationer?¶
Freeze är ett verktyg för att skapa fristående applikationer. När du fryser Tkinter-applikationer kommer applikationerna inte att vara helt fristående, eftersom applikationen fortfarande behöver Tcl- och Tk-biblioteken.
En lösning är att leverera programmet med Tcl- och Tk-biblioteken och peka på dem vid körning med hjälp av miljövariablerna TCL_LIBRARY
och TK_LIBRARY
.
Olika freeze-bibliotek från tredje part, t.ex. py2exe och cx_Freeze, har inbyggd hantering av Tkinter-program.
Kan jag få Tk-händelser hanterade medan jag väntar på I/O?¶
På andra plattformar än Windows, ja, och du behöver inte ens trådar! Men du kommer att behöva omstrukturera din I/O-kod lite. Tk har en motsvarighet till Xt:s XtAddInput()
-anrop, som låter dig registrera en callback-funktion som kommer att anropas från Tk:s mainloop när I/O är möjligt på en filbeskrivare. Se Filhanterare.
Jag kan inte få nyckelbindningar att fungera i Tkinter: varför?¶
Ett ofta hört klagomål är att händelsehanterare bound till händelser med metoden bind()
inte hanteras även om rätt tangent trycks in.
Den vanligaste orsaken är att den widget som bindningen gäller inte har ”tangentbordsfokus”. Kolla in Tk-dokumentationen för kommandot focus. Vanligtvis får en widget tangentbordsfokus genom att klicka i den (men inte för etiketter; se alternativet takefocus).