Документация Python неофициальный перевод

gui.md

117 строк · 11.9 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/2.6/faq/gui.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# [FAQ по графическому интерфейсу пользователя](https://python-all.ru/2.6/faq/gui.html#id1)89Содержание1011- [Часто задаваемые вопросы о графическом интерфейсе пользователя](https://python-all.ru/2.6/faq/gui.html#graphic-user-interface-faq)1213  - [Общие вопросы по GUI](https://python-all.ru/2.6/faq/gui.html#general-gui-questions)1415    - [Какие существуют кроссплатформенные GUI-инструментарии для Python?](https://python-all.ru/2.6/faq/gui.html#what-platform-independent-gui-toolkits-exist-for-python)1617      - [Tkinter](https://python-all.ru/2.6/faq/gui.html#tkinter)18      - [wxWidgets](https://python-all.ru/2.6/faq/gui.html#wxwidgets)19      - [Qt](https://python-all.ru/2.6/faq/gui.html#qt)20      - [Gtk+](https://python-all.ru/2.6/faq/gui.html#gtk)21      - [FLTK](https://python-all.ru/2.6/faq/gui.html#fltk)22      - [FOX](https://python-all.ru/2.6/faq/gui.html#fox)23      - [OpenGL](https://python-all.ru/2.6/faq/gui.html#opengl)24    - [Какие существуют платформозависимые GUI-инструментарии для Python?](https://python-all.ru/2.6/faq/gui.html#what-platform-specific-gui-toolkits-exist-for-python)25  - [Вопросы по Tkinter](https://python-all.ru/2.6/faq/gui.html#tkinter-questions)2627    - [Как заморозить приложения Tkinter?](https://python-all.ru/2.6/faq/gui.html#how-do-i-freeze-tkinter-applications)28    - [Можно ли обрабатывать события Tk во время ожидания ввода-вывода?](https://python-all.ru/2.6/faq/gui.html#can-i-have-tk-events-handled-while-waiting-for-i-o)29    - [Не удаётся заставить работать привязки клавиш в Tkinter: почему?](https://python-all.ru/2.6/faq/gui.html#i-can-t-get-key-bindings-to-work-in-tkinter-why)3031## [Общие вопросы по GUI](https://python-all.ru/2.6/faq/gui.html#id2)3233### [Какие кроссплатформенные инструментарии GUI существуют для Python?](https://python-all.ru/2.6/faq/gui.html#id3)3435В зависимости от целевой платформы (платформ) существует несколько.3637#### [Tkinter](https://python-all.ru/2.6/faq/gui.html#id4)3839Стандартные сборки Python включают объектно-ориентированный интерфейс к набору виджетов Tcl/Tk, называемый Tkinter. Это, вероятно, самый простой в установке и использовании. Для получения дополнительной информации о Tk, включая ссылки на исходный код, посетите домашнюю страницу Tcl/Tk по адресу [http://www.tcl.tk](https://python-all.ru/2.6/faq/gui.html). Tcl/Tk полностью переносим на платформы MacOS, Windows и Unix.4041#### [wxWidgets](https://python-all.ru/2.6/faq/gui.html#id5)4243wxWidgets – это библиотека классов GUI, написанная на C++, которая является переносимым интерфейсом к различным платформозависимым библиотекам и имеет интерфейс Python под названием [wxPython](https://python-all.ru/2.6/faq/gui.html).4445wxWidgets сохраняет внешний вид и поведение базового графического инструментария и имеет большой набор виджетов и коллекцию классов GDI. Подробнее см. на [странице wxWidgets](https://python-all.ru/2.6/faq/gui.html).4647wxWidgets поддерживает Windows и MacOS; на Unix-подобных системах он поддерживает как GTk+, так и Motif.4849#### [Qt](https://python-all.ru/2.6/faq/gui.html#id6)5051Существуют привязки для библиотеки Qt ([PyQt](https://python-all.ru/2.6/faq/gui.html)) и для KDE ([PyKDE](https://python-all.ru/2.6/faq/gui.html)). Если разрабатывается открытое программное обеспечение, платить за PyQt не требуется, но для проприетарных приложений необходимо приобрести лицензию на PyQt у [Riverbank Computing](https://python-all.ru/2.6/faq/gui.html) и (до Qt 4.4; начиная с Qt 4.5 лицензия LGPL) лицензию на Qt у [Trolltech](https://python-all.ru/2.6/faq/gui.html).5253#### [Gtk+](https://python-all.ru/2.6/faq/gui.html#id7)5455Привязки PyGtk к [набору инструментов Gtk+](https://python-all.ru/2.6/faq/gui.html) были реализованы Джеймсом Хенстриджем; см. \<[http://www.pygtk.org](https://python-all.ru/2.6/faq/gui.html)\>.5657#### [FLTK](https://python-all.ru/2.6/faq/gui.html#id8)5859Привязки Python для [набора инструментов FLTK](https://python-all.ru/2.6/faq/gui.html), простой, но мощной и зрелой кроссплатформенной оконной системы, доступны в [проекте PyFLTK](https://python-all.ru/2.6/faq/gui.html).6061#### [FOX](https://python-all.ru/2.6/faq/gui.html#id9)6263Доступна обёртка для [FOX toolkit](https://python-all.ru/2.6/faq/gui.html) под названием [FXpy](https://python-all.ru/2.6/faq/gui.html). FOX поддерживает как Unix-подобные системы, так и Windows.6465#### [OpenGL](https://python-all.ru/2.6/faq/gui.html#id10)6667Для привязок OpenGL см. [PyOpenGL](https://python-all.ru/2.6/faq/gui.html).6869### [Какие платформозависимые наборы инструментов GUI существуют для Python?](https://python-all.ru/2.6/faq/gui.html#id11)7071[Порт для Mac](https://python-all.ru/2.6/faq/gui.html) от Джека Янсена содержит обширный и постоянно растущий набор модулей, поддерживающих вызовы встроенных инструментов Mac. Этот порт поддерживает библиотеки Carbon в MacOS X.7273Установив [мост PyObjc для Objective-C](https://python-all.ru/2.6/faq/gui.html), программы на Python могут использовать библиотеки Cocoa в MacOS X. См. документацию, поставляемую с портом для Mac.7475[*Pythonwin*](https://python-all.ru/2.6/faq/windows.html#windows-faq) от Mark Hammond включает интерфейс к Microsoft Foundation Classes и среду программирования на Python, которая в основном написана на Python с использованием классов MFC.7677## [Вопросы по Tkinter](https://python-all.ru/2.6/faq/gui.html#id12)7879### [Как заморозить приложения Tkinter?](https://python-all.ru/2.6/faq/gui.html#id13)8081Freeze – это инструмент для создания автономных приложений. При заморозке приложений Tkinter приложения не будут полностью автономными, поскольку приложению всё равно потребуются библиотеки Tcl и Tk.8283Одно из решений – поставлять приложение вместе с библиотеками Tcl и Tk и указывать на них во время выполнения с помощью **TCL\_LIBRARY** и **TK\_LIBRARY** переменных окружения.8485Чтобы получить по-настоящему автономные приложения, сценарии Tcl, составляющие библиотеку, также должны быть интегрированы в приложение. Одним из инструментов, поддерживающих это, является SAM (автономные модули), который входит в состав дистрибутива Tix ([http://tix.sourceforge.net/](https://python-all.ru/2.6/faq/gui.html)).8687Соберите Tix с включённым SAM, выполните соответствующий вызов `Tclsam_init()` и т.д. внутри `Modules/tkappinit.c` Python и слинкуйте с libtclsam и libtksam (возможно, также стоит включить библиотеки Tix).8889### [Можно ли обрабатывать события Tk во время ожидания ввода-вывода?](https://python-all.ru/2.6/faq/gui.html#id14)9091Да, и для этого даже не нужны потоки! Но придётся немного перестроить код ввода-вывода. В Tk есть аналог вызова `XtAddInput()` из Xt, который позволяет зарегистрировать функцию обратного вызова, вызываемую из главного цикла Tk, когда возможен ввод-вывод через файловый дескриптор. Вот что нужно сделать:9293```python94from Tkinter import tkinter95tkinter.createfilehandler(file, mask, callback)96```9798Файл может быть файловым объектом Python или объектом сокета (фактически, любым объектом, имеющим метод fileno()), либо целочисленным файловым дескриптором. Маска – одна из констант tkinter.READABLE или tkinter.WRITABLE. Функция обратного вызова вызывается следующим образом:99100```python101callback(file, mask)102```103104По завершении необходимо отменить регистрацию обратного вызова, используя105106```python107tkinter.deletefilehandler(file)108```109110Примечание: поскольку неизвестно, *сколько байт* доступно для чтения, нельзя использовать методы read или readline файлового объекта Python, так как они будут настаивать на чтении предопределённого количества байтов. Для сокетов прекрасно подойдут методы `recv()` или `recvfrom()`; для других файлов используйте `os.read(file.fileno(), maxbytecount)`.111112### [Не удаётся заставить работать привязки клавиш в Tkinter: почему?](https://python-all.ru/2.6/faq/gui.html#id15)113114Нередко жалуются, что обработчики событий, назначенные через метод `bind()`, не срабатывают, даже если нужная клавиша нажата.115116Наиболее распространённая причина в том, что виджет, к которому относится привязка, не имеет «фокуса клавиатуры». Обратитесь к документации Tk по команде focus. Обычно виджет получает фокус клавиатуры при щелчке по нему (но не для меток; см. опцию takefocus).117