Содержание страницы
FAQ по графическому интерфейсу пользователя¶Graphic User Interface FAQ
Общие вопросы по GUI¶General 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.
Вопросы по Tkinter¶Tkinter 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).