Часто задаваемые вопросы по графическому интерфейсу пользователя – документация Python 3.6
Документация Python неофициальный перевод
Содержание страницы

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

Общие вопросы по GUIGeneral GUI Questions

Какие кроссплатформенные инструментарии GUI существуют для Python?What platform-independent GUI toolkits exist for Python?

В зависимости от целевой платформы существует несколько вариантов. Некоторые из них ещё не портированы на Python 3. По крайней мере Tkinter и Qt известны своей совместимостью с Python 3.

Tkinter

Стандартные сборки Python включают объектно-ориентированный интерфейс к набору виджетов Tcl/Tk, называемый tkinter. Вероятно, это самый простой в установке (поскольку он входит в большинство бинарных дистрибутивов Python) и использовании. Для получения дополнительной информации о Tk, включая указатели на исходный код, посетите домашнюю страницу Tcl/Tk. Tcl/Tk полностью переносим на платформы Mac OS X, Windows и Unix.

wxWidgets

wxWidgets (https://www.wxwidgets.org) – это бесплатная переносимая библиотека классов для создания GUI, написанная на C++. Она обеспечивает нативный внешний вид на многих платформах, включая Windows, Mac OS X, GTK, X11; все они указаны как текущие стабильные целевые платформы. Для многих языков, включая Python, Perl, Ruby и другие, существуют языковые привязки.

wxPython (http://www.wxpython.org) – это привязка для wxWidgets на Python. Хотя wxPython часто немного отстаёт от официальных выпусков wxWidgets, он также предоставляет ряд возможностей через расширения на чистом Python, недоступные в других языковых привязках. Существует активное сообщество пользователей и разработчиков wxPython.

И wxWidgets, и wxPython являются бесплатным программным обеспечением с открытым исходным кодом и разрешительными лицензиями, которые допускают их использование как в коммерческих продуктах, так и в бесплатном или условно-бесплатном ПО.

Qt

Существуют привязки для набора инструментов Qt (с использованием либо PyQt, либо PySide) и для KDE (PyKDE4). PyQt в настоящее время более зрелый, чем PySide, но для написания проприетарных приложений необходимо приобрести лицензию PyQt у Riverbank Computing. PySide бесплатен для всех приложений.

Qt версии 4.5 и выше распространяется по лицензии LGPL; также коммерческие лицензии доступны у The Qt Company.

Gtk+

Привязки GObject introspection для Python позволяют писать приложения GTK+ 3. Также существует учебник по Python GTK+ 3.

Более старые привязки PyGtk для набора инструментов Gtk+ 2 были реализованы Джеймсом Хенстриджем; см. <http://www.pygtk.org>.

Kivy

Kivy – это кроссплатформенная библиотека GUI, поддерживающая как настольные операционные системы (Windows, macOS, Linux), так и мобильные устройства (Android, iOS). Она написана на Python и Cython и может использовать различные оконные бэкенды.

Kivy – это бесплатное программное обеспечение с открытым исходным кодом, распространяемое под лицензией MIT.

FLTK

Привязки Python для набора инструментов FLTK, простой, но мощной и зрелой кроссплатформенной оконной системы, доступны в проекте PyFLTK.

OpenGL

Для привязок OpenGL см. PyOpenGL.

Какие платформозависимые наборы инструментов GUI существуют для Python?What platform-specific GUI toolkits exist for Python?

Установив PyObjc Objective-C bridge, программы на Python могут использовать библиотеки Cocoa от Mac OS X.

Pythonwin от Mark Hammond включает интерфейс к Microsoft Foundation Classes и среду программирования на Python, которая в основном написана на Python с использованием классов MFC.

Вопросы по TkinterTkinter questions

Как заморозить приложения Tkinter?How do I freeze Tkinter applications?

Freeze – это инструмент для создания автономных приложений. При заморозке приложений Tkinter приложения не будут полностью автономными, поскольку приложению всё равно потребуются библиотеки Tcl и Tk.

Одно из решений – поставлять приложение вместе с библиотеками Tcl и Tk и указывать на них во время выполнения с помощью TCL_LIBRARY и TK_LIBRARY переменных окружения.

Чтобы получить по-настоящему автономные приложения, сценарии Tcl, составляющие библиотеку, также должны быть интегрированы в приложение. Одним из инструментов, поддерживающих это, является SAM (автономные модули), который входит в состав дистрибутива Tix (http://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).