Документация Python неофициальный перевод
Содержание страницы

FAQ по графическому интерфейсу пользователяGraphic User Interface FAQ

Общие вопросы по GUIGeneral GUI Questions

Какие GUI-инструментарии существуют для Python?What GUI toolkits exist for Python?

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

В зависимости от того, на какие платформы вы ориентируетесь, существует также несколько альтернатив. Список кроссплатформенных и платформенных GUI фреймворков можно найти в Python Wiki.

Вопросы по TkinterTkinter questions

Как заморозить приложения Tkinter?How do I freeze Tkinter applications?

Freeze – это инструмент для создания автономных приложений. При заморозке приложений Tkinter приложения не будут полностью автономными, поскольку приложению всё равно потребуются библиотеки Tcl и Tk.

Одно из решений – поставлять приложение вместе с библиотеками Tcl и Tk и указывать на них во время выполнения с помощью переменных окружения TCL_LIBRARY и TK_LIBRARY .

Различные сторонние библиотеки заморозки, такие как py2exe и cx_Freeze, имеют встроенную поддержку приложений Tkinter.

Можно ли обрабатывать события Tk во время ожидания ввода-вывода?Can I have Tk events handled while waiting for I/O?

На платформах, отличных от Windows, да, и вам даже не понадобятся потоки! Но придётся немного перестроить ваш код ввода-вывода. В Tk есть эквивалент вызова XtAddInput() из Xt, который позволяет зарегистрировать функцию обратного вызова, которая будет вызываться из главного цикла Tk, когда станет возможным ввод-вывод для файлового дескриптора. См. Обработчики файлов.

Не удаётся заставить работать привязки клавиш в Tkinter: почему?I can’t get key bindings to work in Tkinter: why?

Частая жалоба заключается в том, что обработчики событий, привязанные к событиям методом bind(), не обрабатываются, даже если нажата соответствующая клавиша.

Наиболее распространённая причина в том, что виджет, к которому относится привязка, не имеет «фокуса клавиатуры». Обратитесь к документации Tk по команде focus. Обычно виджет получает фокус клавиатуры при щелчке по нему (но не для меток; см. опцию takefocus).