FAQ по графическому интерфейсу пользователя¶
Содержание
Общие вопросы по графическому интерфейсу пользователя¶
Какие наборы инструментов GUI существуют для Python?¶
Стандартные сборки Python включают объектно-ориентированный интерфейс к набору виджетов Tcl/Tk, называемый tkinter. Это, вероятно, самый простой в установке (поскольку он входит в состав большинства binary distributions Python) и использовании. Более подробную информацию о Tk, включая указатели на исходный текст, смотрите в Tcl/Tk home page. Tcl/Tk полностью переносится на платформы macOS, Windows и Unix.
В зависимости от того, на какую платформу (платформы) вы нацелены, существует также несколько альтернатив. Фреймворки графического интерфейса list of cross-platform и platform-specific можно найти на вики python.
Вопросы по Tkinter¶
Как заморозить приложения Tkinter?¶
Freeze - это инструмент для создания автономных приложений. При замораживании приложений Tkinter приложения не будут действительно автономными, так как приложению по-прежнему нужны библиотеки Tcl и Tk.
Одно из решений - поставлять приложение с библиотеками Tcl и Tk и указывать на них во время выполнения с помощью переменных окружения TCL_LIBRARY
и TK_LIBRARY
.
Чтобы получить действительно автономные приложения, Tcl-скрипты, составляющие библиотеку, должны быть также интегрированы в приложение. Одним из инструментов, поддерживающих это, является SAM (автономные модули), который входит в состав дистрибутива Tix (http://tix.sourceforge.net/).
Соберите Tix с включенным SAM, выполните соответствующий вызов Tclsam_init()
и т.д. внутри Python’s Modules/tkappinit.c
, и соедините с libtclsam и libtksam (можно включить и библиотеки Tix).
Можно ли обрабатывать события Tk в ожидании ввода/вывода?¶
На платформах, отличных от Windows, да, и вам даже не нужны потоки! Но вам придется немного перестроить код ввода-вывода. В Tk есть эквивалент Xt’овского вызова XtAddInput()
, который позволяет вам зарегистрировать функцию обратного вызова, которая будет вызываться из главного цикла Tk, когда ввод/вывод возможен на файловом дескрипторе. См. Обработчики файлов.
Я не могу заставить привязки клавиш работать в Tkinter: почему?¶
Часто можно услышать жалобу на то, что обработчики событий, привязанные к событиям с помощью метода bind()
, не обрабатываются даже при нажатии соответствующей клавиши.
Наиболее распространенной причиной является то, что виджет, к которому применяется привязка, не имеет «фокуса клавиатуры». Посмотрите в документации Tk команду focus. Обычно виджету присваивается фокус клавиатуры при щелчке на нем (но не для меток; см. опцию takefocus).