Часто задаваемые вопросы по графическому пользовательскому интерфейсу
Общие вопросы по графическому интерфейсу
Какие пакеты GUI существуют для Python?
Стандартные сборки Python включают объектно-ориентированный интерфейс к набору виджетов Tcl/Tk, называемый tkinter. Его, вероятно, проще всего установить (так как он входит в большинство бинарных дистрибутивов Python), и им проще пользоваться. Для получения дополнительной информации о Tk, включая указатели на исходный код, см. домашнюю страницу Tcl/Tk. Tcl/Tk полностью портируется на платформы macOS, Windows и Unix.
В зависимости от целевых платформ также существуют альтернативы. Список кроссплатформенных и платформоспецифических фреймворков GUI можно найти на вики-странице Python по ссылке и другой ссылке.
Вопросы по Tkinter
Как заморозить приложения Tkinter?
Freeze — это инструмент для создания автономных приложений. При замораживании приложений Tkinter приложения не будут полностью автономными, так как приложение всё ещё будет нуждаться в библиотеках Tcl и Tk.
Одним из решений является поставка приложения с библиотеками Tcl и Tk и указание на них во время выполнения с помощью переменных окружения TCL_LIBRARY и TK_LIBRARY.
Для создания действительно автономных приложений необходимо интегрировать скрипты Tcl, которые формируют библиотеку, в само приложение. Один из инструментов, поддерживающих это, — SAM (standalone modules), который входит в дистрибутив Tix (http://tix.sourceforge.net/).
Скомпилируйте Tix с поддержкой SAM, выполните соответствующий вызов Tclsam_init(), и так далее внутри Modules/tkappinit.c Python, и свяжите с libtclsam и libtksam (возможно, также включите библиотеки Tix).
Можно ли обрабатывать события Tk при ожидании ввода-вывода?
На платформах, отличных от Windows, да, и вам даже не нужны потоки! Но вам нужно немного перестроить код ввода-вывода. Tk имеет эквивалент вызова Xt XtAddInput(), который позволяет зарегистрировать функцию обратного вызова, которая будет вызвана из Tk mainloop, когда ввод-вывод возможен на дескрипторе файла. См. Обработчики файлов.
Не работают привязки клавиш в Tkinter: почему?
Частая жалоба заключается в том, что обработчики событий, привязанные к событиям с помощью метода bind(), не обрабатываются, даже когда нажимается соответствующая клавиша.
Наиболее распространённая причина заключается в том, что виджет, к которому применяется привязка, не имеет «фокуса клавиатуры». Проверьте документацию Tk по команде focus. Обычно виджет получает фокус клавиатуры, нажав на него (но не для меток; см. параметр takefocus).
© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.9/faq/gui.html