Содержание страницы
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 (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.
Какие платформозависимые наборы инструментов 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, когда возможна операция ввода-вывода с файловым дескриптором. См. File Handlers.
Не удаётся заставить работать привязки клавиш в Tkinter: почему?¶I can’t get key bindings to work in Tkinter: why?
Нередко жалуются, что обработчики событий, назначенные через метод bind(), не срабатывают, даже если нужная клавиша нажата.
Наиболее распространённая причина в том, что виджет, к которому относится привязка, не имеет «фокуса клавиатуры». Обратитесь к документации Tk по команде focus. Обычно виджет получает фокус клавиатуры при щелчке по нему (но не для меток; см. опцию takefocus).