gui.md
1> **Источник:** https://python-all.ru/3.9/faq/gui.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# [FAQ по графическому интерфейсу пользователя](https://python-all.ru/3.9/faq/gui.html#id1)89Содержание1011- [Часто задаваемые вопросы о графическом интерфейсе пользователя](https://python-all.ru/3.9/faq/gui.html#graphic-user-interface-faq)1213 - [Общие вопросы по GUI](https://python-all.ru/3.9/faq/gui.html#general-gui-questions)14 - [Какие наборы инструментов GUI существуют для Python?](https://python-all.ru/3.9/faq/gui.html#what-gui-toolkits-exist-for-python)15 - [Вопросы по Tkinter](https://python-all.ru/3.9/faq/gui.html#tkinter-questions)1617 - [Как заморозить приложения Tkinter?](https://python-all.ru/3.9/faq/gui.html#how-do-i-freeze-tkinter-applications)18 - [Можно ли обрабатывать события Tk во время ожидания ввода-вывода?](https://python-all.ru/3.9/faq/gui.html#can-i-have-tk-events-handled-while-waiting-for-i-o)19 - [Не удаётся заставить работать привязки клавиш в Tkinter: почему?](https://python-all.ru/3.9/faq/gui.html#i-can-t-get-key-bindings-to-work-in-tkinter-why)2021## [Общие вопросы по GUI](https://python-all.ru/3.9/faq/gui.html#id2)2223## [Какие GUI-инструментарии существуют для Python?](https://python-all.ru/3.9/faq/gui.html#id3)2425Стандартные сборки Python включают объектно-ориентированный интерфейс к набору виджетов Tcl/Tk, называемый [tkinter](https://python-all.ru/3.9/library/tk.html#tkinter). Вероятно, это самый простой в установке (поскольку он входит в большинство [бинарных дистрибутивов](https://python-all.ru/3.9/faq/gui.html) Python) и использовании. Для получения дополнительной информации о Tk, включая указатели на исходный код, см. [домашнюю страницу Tcl/Tk](https://python-all.ru/3.9/faq/gui.html). Tcl/Tk полностью переносим на платформы macOS, Windows и Unix.2627В зависимости от того, на какие платформы вы ориентируетесь, существует также несколько альтернатив. Список [кроссплатформенных](https://python-all.ru/3.9/faq/gui.html) и [платформенных](https://python-all.ru/3.9/faq/gui.html) GUI фреймворков можно найти в Python Wiki.2829## [Вопросы по Tkinter](https://python-all.ru/3.9/faq/gui.html#id4)3031### [Как заморозить приложения Tkinter?](https://python-all.ru/3.9/faq/gui.html#id5)3233Freeze – это инструмент для создания автономных приложений. При заморозке приложений Tkinter приложения не будут полностью автономными, поскольку приложению всё равно потребуются библиотеки Tcl и Tk.3435Одно из решений – поставлять приложение вместе с библиотеками Tcl и Tk и указывать на них во время выполнения с помощью `TCL_LIBRARY` и `TK_LIBRARY` переменных окружения.3637Чтобы получить по-настоящему автономные приложения, сценарии Tcl, составляющие библиотеку, также должны быть интегрированы в приложение. Одним из инструментов, поддерживающих это, является SAM (автономные модули), который входит в состав дистрибутива Tix ([http://tix.sourceforge.net/](https://python-all.ru/3.9/faq/gui.html)).3839Соберите Tix с включённым SAM, выполните соответствующий вызов `Tclsam_init()` и т.д. внутри `Modules/tkappinit.c` Python и свяжите с libtclsam и libtksam (возможно, стоит включить и библиотеки Tix).4041### [Можно ли обрабатывать события Tk во время ожидания ввода-вывода?](https://python-all.ru/3.9/faq/gui.html#id6)4243На платформах, отличных от Windows, да, и даже не нужны потоки! Но придётся немного реструктурировать код ввода-вывода. В Tk есть аналог вызова `XtAddInput()` из Xt, который позволяет зарегистрировать функцию обратного вызова, которая будет вызвана из главного цикла Tk, когда возможен ввод-вывод для файлового дескриптора. См. [Обработчики файлов](https://python-all.ru/3.9/library/tkinter.html#tkinter-file-handlers).4445### [Не удаётся заставить работать привязки клавиш в Tkinter: почему?](https://python-all.ru/3.9/faq/gui.html#id7)4647Часто можно услышать жалобу на то, что обработчики событий, привязанные к событиям с помощью метода `bind()`, не срабатывают, даже если нажата соответствующая клавиша.4849Наиболее распространённая причина в том, что виджет, к которому относится привязка, не имеет «фокуса клавиатуры». Обратитесь к документации Tk по команде focus. Обычно виджет получает фокус клавиатуры при щелчке по нему (но не для меток; см. опцию takefocus).50