Содержание страницы
FAQ по графическому интерфейсу пользователя¶Graphic User Interface FAQ
Содержание
- Часто задаваемые вопросы о графическом интерфейсе пользователя
- Общие вопросы по GUI
- Какие существуют кроссплатформенные GUI-инструментарии для Python?
- Какие существуют платформозависимые GUI-инструментарии для Python?What platform-specific GUI toolkits exist for Python?
- Вопросы по Tkinter
- Как заморозить приложения Tkinter?
- Можно ли обрабатывать события Tk во время ожидания ввода-вывода?Can I have Tk events handled while waiting for I/O?
- Не удаётся заставить работать привязки клавиш в Tkinter: почему?I can’t get key bindings to work in Tkinter: why?
Общие вопросы по GUI¶General 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.
Какие платформозависимые наборы инструментов 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.
Вопросы по Tkinter¶Tkinter 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).