Содержание страницы
FAQ по графическому интерфейсу пользователя¶Graphic User Interface FAQ
Содержание
Часто задаваемые вопросы о графическом интерфейсе пользователя
Какие существуют кроссплатформенные GUI-инструментарии для Python?
Какие существуют платформозависимые GUI-инструментарии для Python?What platform-specific GUI toolkits exist for Python?
-
Можно ли обрабатывать события 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 существуют для Python?¶What platform-independent GUI toolkits exist for Python?
В зависимости от целевой платформы (платформ) существует несколько.
Tkinter¶
Стандартные сборки Python включают объектно-ориентированный интерфейс к набору виджетов Tcl/Tk, называемый Tkinter. Вероятно, это самый простой способ установки и использования. Для получения дополнительной информации о Tk, включая указатели на исходный код, посетите домашнюю страницу Tcl/Tk по адресу https://www.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+¶
Привязки PyGtk к набору инструментов Gtk+ были реализованы Джеймсом Хенстриджем; см. <http://www.pygtk.org>.
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).