Spec-Zone.ru › Python 3.9

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

  • Общие вопросы по графическому интерфейсу
  • Какие пакеты GUI существуют для Python?
  • Вопросы по Tkinter

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

Общие вопросы по графическому интерфейсу

Какие пакеты GUI существуют для Python?

Стандартные сборки Python включают объектно-ориентированный интерфейс к набору виджетов Tcl/Tk, называемый tkinter. Его, вероятно, проще всего установить (так как он входит в большинство бинарных дистрибутивов Python), и им проще пользоваться. Для получения дополнительной информации о Tk, включая указатели на исходный код, см. домашнюю страницу Tcl/Tk. Tcl/Tk полностью портируется на платформы macOS, Windows и Unix.

В зависимости от целевых платформ также существуют альтернативы. Список кроссплатформенных и платформоспецифических фреймворков GUI можно найти на вики-странице Python по ссылке и другой ссылке.

Вопросы по Tkinter

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

Freeze — это инструмент для создания автономных приложений. При замораживании приложений Tkinter приложения не будут полностью автономными, так как приложение всё ещё будет нуждаться в библиотеках Tcl и Tk.

Одним из решений является поставка приложения с библиотеками Tcl и Tk и указание на них во время выполнения с помощью переменных окружения TCL_LIBRARY и TK_LIBRARY.

Для создания действительно автономных приложений необходимо интегрировать скрипты Tcl, которые формируют библиотеку, в само приложение. Один из инструментов, поддерживающих это, — SAM (standalone modules), который входит в дистрибутив Tix (http://tix.sourceforge.net/).

Скомпилируйте Tix с поддержкой SAM, выполните соответствующий вызов Tclsam_init(), и так далее внутри Modules/tkappinit.c Python, и свяжите с libtclsam и libtksam (возможно, также включите библиотеки Tix).

Можно ли обрабатывать события Tk при ожидании ввода-вывода?

На платформах, отличных от Windows, да, и вам даже не нужны потоки! Но вам нужно немного перестроить код ввода-вывода. Tk имеет эквивалент вызова Xt XtAddInput(), который позволяет зарегистрировать функцию обратного вызова, которая будет вызвана из Tk mainloop, когда ввод-вывод возможен на дескрипторе файла. См. Обработчики файлов.

Не работают привязки клавиш в Tkinter: почему?

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

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

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

Spec-Zone.ru

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