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

gui.md

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

1> **Источник:** https://python-all.ru/3.1/faq/gui.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# [FAQ по графическому интерфейсу пользователя](https://python-all.ru/3.1/faq/gui.html#id1)89Содержание1011- [Часто задаваемые вопросы о графическом интерфейсе пользователя](https://python-all.ru/3.1/faq/gui.html#graphic-user-interface-faq)1213  - [Общие вопросы по GUI](https://python-all.ru/3.1/faq/gui.html#general-gui-questions)14  - [Какие существуют кроссплатформенные GUI-инструментарии для Python?](https://python-all.ru/3.1/faq/gui.html#what-platform-independent-gui-toolkits-exist-for-python)1516    - [Tkinter](https://python-all.ru/3.1/faq/gui.html#tkinter)17    - [wxWindows](https://python-all.ru/3.1/faq/gui.html#wxwindows)18    - [Qt](https://python-all.ru/3.1/faq/gui.html#qt)19    - [Gtk+](https://python-all.ru/3.1/faq/gui.html#gtk)20    - [FLTK](https://python-all.ru/3.1/faq/gui.html#fltk)21    - [FOX](https://python-all.ru/3.1/faq/gui.html#fox)22    - [OpenGL](https://python-all.ru/3.1/faq/gui.html#opengl)23  - [Какие существуют платформозависимые GUI-инструментарии для Python?](https://python-all.ru/3.1/faq/gui.html#what-platform-specific-gui-toolkits-exist-for-python)24  - [Вопросы по Tkinter](https://python-all.ru/3.1/faq/gui.html#tkinter-questions)2526    - [Как заморозить приложения Tkinter?](https://python-all.ru/3.1/faq/gui.html#how-do-i-freeze-tkinter-applications)27    - [Можно ли обрабатывать события Tk во время ожидания ввода-вывода?](https://python-all.ru/3.1/faq/gui.html#can-i-have-tk-events-handled-while-waiting-for-i-o)28    - [Не удаётся заставить работать привязки клавиш в Tkinter: почему?](https://python-all.ru/3.1/faq/gui.html#i-can-t-get-key-bindings-to-work-in-tkinter-why)2930## [Общие вопросы по GUI](https://python-all.ru/3.1/faq/gui.html#id2)3132## [Какие кроссплатформенные инструментарии GUI существуют для Python?](https://python-all.ru/3.1/faq/gui.html#id3)3334В зависимости от целевой платформы (платформ) существует несколько.3536### [Tkinter](https://python-all.ru/3.1/faq/gui.html#id4)3738Стандартные сборки Python включают объектно-ориентированный интерфейс к набору виджетов Tcl/Tk, называемый Tkinter. Это, вероятно, самый простой в установке и использовании. Для получения дополнительной информации о Tk, включая ссылки на исходный код, посетите домашнюю страницу Tcl/Tk по адресу [http://www.tcl.tk](https://python-all.ru/3.1/faq/gui.html). Tcl/Tk полностью переносим на платформы MacOS, Windows и Unix.3940### [wxWindows](https://python-all.ru/3.1/faq/gui.html#id5)4142wxWidgets ([http://www.wxwidgets.org](https://python-all.ru/3.1/faq/gui.html)) – это свободная переносимая библиотека классов GUI, написанная на C++, которая обеспечивает нативный внешний вид на многих платформах, включая Windows, MacOS X, GTK, X11 – все они указаны как текущие стабильные цели. Существуют привязки для многих языков, включая Python, Perl, Ruby и т. д.4344wxPython ([http://www.wxpython.org](https://python-all.ru/3.1/faq/gui.html)) – это привязка для wxWidgets на Python. Хотя wxPython часто немного отстаёт от официальных выпусков wxWidgets, он также предоставляет ряд возможностей через расширения на чистом Python, недоступные в других языковых привязках. Существует активное сообщество пользователей и разработчиков wxPython.4546И wxWidgets, и wxPython являются бесплатным программным обеспечением с открытым исходным кодом и разрешительными лицензиями, которые допускают их использование как в коммерческих продуктах, так и в бесплатном или условно-бесплатном ПО.4748### [Qt](https://python-all.ru/3.1/faq/gui.html#id6)4950Существуют привязки для инструментария Qt ([PyQt](https://python-all.ru/3.1/faq/gui.html)) и для KDE (PyKDE). Если вы пишете открытое программное обеспечение, вам не нужно платить за PyQt, но если вы хотите писать проприетарные приложения, вы должны купить лицензию на PyQt у [Riverbank Computing](https://python-all.ru/3.1/faq/gui.html) и (до Qt 4.4; Qt 4.5 и выше лицензируется по LGPL) лицензию на Qt у [Trolltech](https://python-all.ru/3.1/faq/gui.html).5152### [Gtk+](https://python-all.ru/3.1/faq/gui.html#id7)5354Привязки PyGtk для инструментария [Gtk+](https://python-all.ru/3.1/faq/gui.html) были реализованы Джеймсом Хенстриджем; смотрите [ftp://ftp.gtk.org/pub/gtk/python/](ftp://ftp.gtk.org/pub/gtk/python/).5556### [FLTK](https://python-all.ru/3.1/faq/gui.html#id8)5758Привязки Python для [набора инструментов FLTK](https://python-all.ru/3.1/faq/gui.html), простой, но мощной и зрелой кроссплатформенной оконной системы, доступны в [проекте PyFLTK](https://python-all.ru/3.1/faq/gui.html).5960### [FOX](https://python-all.ru/3.1/faq/gui.html#id9)6162Доступна обёртка для [FOX toolkit](https://python-all.ru/3.1/faq/gui.html) под названием [FXpy](https://python-all.ru/3.1/faq/gui.html). FOX поддерживает как Unix-подобные системы, так и Windows.6364### [OpenGL](https://python-all.ru/3.1/faq/gui.html#id10)6566Для привязок OpenGL см. [PyOpenGL](https://python-all.ru/3.1/faq/gui.html).6768## [Какие платформозависимые наборы инструментов GUI существуют для Python?](https://python-all.ru/3.1/faq/gui.html#id11)6970[Порт для Mac](https://python-all.ru/3.1/faq/gui.html) от Джека Янсена имеет богатый и постоянно растущий набор модулей, поддерживающих вызовы собственных инструментов Mac. Порт включает поддержку библиотек Carbon для MacOS9 и MacOS X. Установив [PyObjc Objective-C bridge](https://python-all.ru/3.1/faq/gui.html), программы на Python могут использовать библиотеки Cocoa для MacOS X. Смотрите документацию, прилагаемую к порту для Mac.7172[*Pythonwin*](https://python-all.ru/3.1/faq/windows.html#windows-faq) от Марка Хэммонда включает интерфейс к библиотеке Microsoft Foundation Classes и среду программирования на Python, использующую этот интерфейс, которая в основном написана на Python.7374## [Вопросы по Tkinter](https://python-all.ru/3.1/faq/gui.html#id12)7576### [Как заморозить приложения Tkinter?](https://python-all.ru/3.1/faq/gui.html#id13)7778Freeze – это инструмент для создания автономных приложений. При заморозке приложений Tkinter приложения не будут полностью автономными, поскольку приложению всё равно потребуются библиотеки Tcl и Tk.7980Одно из решений – поставлять приложение с библиотеками tcl и tk и указывать на них во время выполнения с помощью **TCL\_LIBRARY** и **TK\_LIBRARY** переменных окружения.8182Чтобы получить действительно автономные приложения, сценарии Tcl, составляющие библиотеку, должны быть интегрированы в приложение. Один из инструментов, поддерживающий это – SAM (автономные модули), который является частью дистрибутива Tix ([http://tix.mne.com](https://python-all.ru/3.1/faq/gui.html)). Соберите Tix с включённым SAM, выполните соответствующий вызов Tclsam\_init и т.д. внутри Python’s Modules/tkappinit.c и свяжите с libtclsam и libtksam (вы также можете включить библиотеки Tix).8384### [Можно ли обрабатывать события Tk во время ожидания ввода-вывода?](https://python-all.ru/3.1/faq/gui.html#id14)8586Да, и вам даже не нужны потоки! Но вам придётся перестроить ваш I/O код немного. Tk имеет эквивалент вызова Xt’s XtAddInput(), который позволяет зарегистрировать функцию обратного вызова, которая будет вызвана из главного цикла Tk, когда I/O возможен на файловом дескрипторе. Вот что вам нужно:8788```python89from Tkinter import tkinter90tkinter.createfilehandler(file, mask, callback)91```9293Файл может быть файловым объектом Python или объектом сокета (фактически, любым объектом, имеющим метод fileno()), либо целочисленным файловым дескриптором. Маска – одна из констант tkinter.READABLE или tkinter.WRITABLE. Функция обратного вызова вызывается следующим образом:9495```python96callback(file, mask)97```9899По завершении необходимо отменить регистрацию обратного вызова, используя100101```python102tkinter.deletefilehandler(file)103```104105Примечание: поскольку неизвестно, *сколько байт* доступно для чтения, нельзя использовать методы read или readline файлового объекта Python, так как они будут настаивать на чтении предопределённого количества байтов. Для сокетов прекрасно подойдут методы `recv()` или `recvfrom()`; для других файлов используйте `os.read(file.fileno(), maxbytecount)`.106107### [Не удаётся заставить работать привязки клавиш в Tkinter: почему?](https://python-all.ru/3.1/faq/gui.html#id15)108109Нередко жалуются, что обработчики событий, назначенные через метод `bind()`, не срабатывают, даже если нужная клавиша нажата.110111Наиболее распространённая причина в том, что виджет, к которому относится привязка, не имеет «фокуса клавиатуры». Обратитесь к документации Tk по команде focus. Обычно виджет получает фокус клавиатуры при щелчке по нему (но не для меток; см. опцию takefocus).112