Содержание страницы
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
.
Чтобы получить действительно автономные приложения, сценарии Tcl, составляющие библиотеку, также должны быть интегрированы в приложение. Одним из инструментов, поддерживающих это, является SAM (автономные модули), который входит в состав дистрибутива Tix (https://tix.sourceforge.net/).
Соберите Tix с включённым SAM, выполните соответствующий вызов Tclsam_init() и т.д. внутри Modules/tkappinit.c Python и свяжите с libtclsam и libtksam (возможно, стоит включить и библиотеки Tix).
Можно ли обрабатывать события 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).