Документация 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 (http://www.wxwidgets.org) – это бесплатная переносимая библиотека классов графического интерфейса, написанная на 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 (PyKDE). 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>.

FLTK

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

FOX

Доступна обёртка для FOX toolkit под названием FXpy. FOX поддерживает как Unix-подобные системы, так и Windows.

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, когда возможна операция ввода-вывода с файловым дескриптором. См. File Handlers.

Не удаётся заставить работать привязки клавиш в Tkinter: почему?I can’t get key bindings to work in Tkinter: why?

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

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