# Поширені запитання про графічний інтерфейс користувача

## Загальні запитання графічного інтерфейсу

## Які інструменти 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 (https://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).