Часто задаваемые вопросы о графическом интерфейсе пользователя
- Общие вопросы о графическом интерфейсе
- Какие наборы инструментов для графического интерфейса существуют для Python?
Общие вопросы о графическом интерфейсе
Какие наборы инструментов для графического интерфейса существуют для 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 (автономные модули), входящий в состав дистрибутива Tix (https://tix.sourceforge.net/).
Соберите Tix с поддержкой SAM, выполните соответствующий вызов Tclsam_init() и т. д. внутри Modules/tkappinit.c Python и выполните компоновку с libtclsam и libtksam (можно также включить библиотеки Tix).
Можно ли обрабатывать события Tk во время ожидания ввода-вывода?
На платформах, отличных от Windows, — да, и даже без потоков! Но для этого придётся немного изменить структуру кода ввода-вывода. В Tk есть эквивалент вызова XtAddInput() из Xt, позволяющий зарегистрировать функцию обратного вызова, которая будет вызываться главным циклом Tk, когда для файлового дескриптора станет возможна операция ввода-вывода. См. раздел Обработчики файлов.
Почему привязки клавиш не работают в Tkinter?
Часто можно услышать жалобу на то, что обработчики событий, привязанные к событиям с помощью метода bind(), не вызываются даже при нажатии соответствующей клавиши.
Чаще всего причина в том, что виджет, к которому применяется привязка, не находится в фокусе клавиатуры. См. документацию Tk по команде focus. Обычно виджет получает фокус клавиатуры при щелчке по нему (но это не относится к меткам; см. параметр takefocus).
© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.12/faq/gui.html