FAQ по графическому пользовательскому интерфейсу

Общие вопросы по графическому интерфейсу

Какие наборы инструментов графического интерфейса существуют для 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.

Различные сторонние библиотеки замораживания, такие как py2exe и cx_Freeze, имеют встроенную обработку для приложений Tkinter.

Можно ли обрабатывать события Tk в ожидании ввода/вывода?

На платформах, отличных от Windows, - да, и вам даже не понадобятся потоки! Но вам придется немного перестроить код ввода-вывода. В Tk есть эквивалент Xt’овского вызова XtAddInput(), который позволяет зарегистрировать функцию обратного вызова, которая будет вызываться из главного цикла Tk, когда ввод/вывод возможен для файлового дескриптора. См. Обработчики файлов.

Я не могу заставить привязку клавиш работать в Tkinter: почему?

Часто можно услышать жалобу на то, что обработчики событий bound для событий с методом bind() не обрабатываются даже при нажатии соответствующей клавиши.

Наиболее распространенная причина заключается в том, что виджет, к которому применяется привязка, не имеет «фокуса клавиатуры». Посмотрите документацию по Tk для команды focus. Обычно виджет получает фокус клавиатуры при щелчке на нем (но не для меток; см. опцию takefocus).