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

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

Какие кроссплатформенные инструментарии 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).