Поширені запитання про графічний інтерфейс користувача¶
Зміст
Загальні запитання графічного інтерфейсу¶
Які інструменти GUI існують для Python?¶
Стандартні збірки Python містять об’єктно-орієнтований інтерфейс до набору віджетів Tcl/Tk під назвою tkinter. Це, мабуть, найпростіший для встановлення (оскільки він входить до складу більшості бінарних дистрибутивів Python) і використання. Для отримання додаткової інформації про Tk, включаючи покажчики на джерело, перегляньте домашню сторінку Tcl/Tk. Tcl/Tk повністю переноситься на платформи macOS, Windows і Unix.
Залежно від того, на яку платформу(и) ви орієнтуєтеся, є також кілька альтернатив. Список кросплатформних і специфічних для платформи фреймворків графічного інтерфейсу можна знайти на python wiki.
Питання по Tkinter¶
Як заморозити програми Tkinter?¶
Freeze — це інструмент для створення автономних програм. Під час заморожування програм Tkinter програми не будуть справді автономними, оскільки програмі все одно знадобляться бібліотеки Tcl і Tk.
One solution is to ship the application with the Tcl and Tk libraries, and point
to them at run-time using the TCL_LIBRARY
and TK_LIBRARY
environment variables.
To get truly stand-alone applications, the Tcl scripts that form the library have to be integrated into the application as well. One tool supporting that is SAM (stand-alone modules), which is part of the Tix distribution (http://tix.sourceforge.net/).
Build Tix with SAM enabled, perform the appropriate call to
Tclsam_init()
, etc. inside Python’s
Modules/tkappinit.c
, and link with libtclsam and libtksam (you
might include the Tix libraries as well).
Чи можу я обробляти події Tk під час очікування введення-виведення?¶
On platforms other than Windows, yes, and you don’t even
need threads! But you’ll have to restructure your I/O
code a bit. Tk has the equivalent of Xt’s XtAddInput()
call, which allows you
to register a callback function which will be called from the Tk mainloop when
I/O is possible on a file descriptor. See Обробники файлів.
Я не можу змусити прив’язки клавіш працювати в Tkinter: чому?¶
An often-heard complaint is that event handlers bound to events with the
bind()
method don’t get handled even when the appropriate key is pressed.
Найпоширенішою причиною є те, що віджет, до якого застосовується прив’язка, не має «фокусу клавіатури». Перегляньте документацію Tk для команди focus. Зазвичай віджет отримує фокус клавіатури, клацнувши його (але не для міток; див. опцію takefocus).