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

Какие независимые от платформы инструментальные средства GUI существуют для 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 - это Python биндинг для wxwidgets. Хотя он часто немного отстает от официальных выпусков wxWidgets, он также предлагает ряд функций через чистые расширения Python, которые недоступны в других языковых привязках. Существует активное сообщество пользователей и разработчиков wxPython.

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

QT

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

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

Gtk+

Привязки интроспекции GObject для 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.

Какие инструменты графического интерфейса для платформы существуют для Python?

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

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

Вопросы по Tkinter

Как заморозить приложения Tkinter?

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

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

Чтобы получить действительно автономные приложения, скрипты Tcl, которые формируют библиотеку, также должны быть интегрированы в приложение. Один инструмент, поддерживающий SAM (автономные модули), который является частью дистрибутива Tix (http://tix.sourceforge.net/).

Создайте Tix с включенным SAM, выполните соответствующий вызов Tclsam_init() и т.д. внутри Python’а Modules/tkappinit.c, а также слинкуйте с libtclsam и libtksam (можно также включить библиотеки Tix).

Могу ли я обрабатывать события Tk во время ожидания ввода-вывода?

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

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

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

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