Spec-Zone.ru › Python 3.8

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

  • Общие вопросы о GUI
  • Какие платформенно-независимые наборы инструментов GUI существуют для Python?

    • Tkinter
    • wxWidgets
    • Qt
    • Gtk+
    • Kivy
    • FLTK
    • OpenGL
  • Какие платформозависимые наборы инструментов GUI существуют для Python?
  • Вопросы по Tkinter

    • Как заморозить приложения Tkinter?
    • Можно ли обрабатывать события Tk во время ожидания ввода-вывода?
    • Почему не работают ключевые привязки в Tkinter?

Общие вопросы о GUI

Какие платформенно-независимые наборы инструментов 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 — это привязка к wxwidgets для Python. Хотя она часто немного отстает от официальных релизов 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 Tutorial.

Более старые привязки 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.

Какие платформозависимые наборы инструментов GUI существуют для Python?

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

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

Вопросы по Tkinter

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

Freeze — это инструмент для создания автономных приложений. При заморозке приложений 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, да, и вам даже не нужны потоки! Но вам нужно будет немного перестроить код ввода-вывода. Tk имеет эквивалент вызова Xt XtAddInput(), который позволяет регистрировать функцию обратного вызова, которая будет вызываться из Tk-главного цикла, когда ввод-вывод возможен на дескрипторе файла. См. Обработчики файлов.

Почему не работают ключевые привязки в Tkinter?

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

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

© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.8/faq/gui.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API