Поширені запитання про графічний інтерфейс користувача

Загальні запитання графічного інтерфейсу

Які інструменти GUI існують для Python?

Стандартні збірки Python містять об’єктно-орієнтований інтерфейс до набору віджетів Tcl/Tk під назвою tkinter. Це, мабуть, найпростіший для встановлення (оскільки він входить до складу більшості бінарних дистрибутивів Python) і використання. Для отримання додаткової інформації про Tk, включаючи покажчики на джерело, перегляньте домашню сторінку Tcl/Tk. Tcl/Tk повністю переноситься на платформи macOS, Windows і Unix.

Залежно від того, на яку платформу(и) ви орієнтуєтеся, є також кілька альтернатив. Список кросплатформних і специфічних для платформи фреймворків графічного інтерфейсу можна знайти на python wiki.

Питання по Tkinter

Як заморозити програми Tkinter?

Freeze — це інструмент для створення автономних програм. Під час заморожування програм Tkinter програми не будуть справді автономними, оскільки програмі все одно знадобляться бібліотеки Tcl і Tk.

One solution is to ship the application with the Tcl and Tk libraries, and point to them at run-time using the TCL_LIBRARY and TK_LIBRARY environment variables.

To get truly stand-alone applications, the Tcl scripts that form the library have to be integrated into the application as well. One tool supporting that is SAM (stand-alone modules), which is part of the Tix distribution (https://tix.sourceforge.net/).

Build Tix with SAM enabled, perform the appropriate call to Tclsam_init(), etc. inside Python’s Modules/tkappinit.c, and link with libtclsam and libtksam (you might include the Tix libraries as well).

Чи можу я обробляти події Tk під час очікування введення-виведення?

On platforms other than Windows, yes, and you don’t even need threads! But you’ll have to restructure your I/O code a bit. Tk has the equivalent of Xt’s XtAddInput() call, which allows you to register a callback function which will be called from the Tk mainloop when I/O is possible on a file descriptor. See Обробники файлів.

Я не можу змусити прив’язки клавіш працювати в Tkinter: чому?

An often-heard complaint is that event handlers bound to events with the bind() method don’t get handled even when the appropriate key is pressed.

Найпоширенішою причиною є те, що віджет, до якого застосовується прив’язка, не має «фокусу клавіатури». Перегляньте документацію Tk для команди focus. Зазвичай віджет отримує фокус клавіатури, клацнувши його (але не для міток; див. опцію takefocus).