Главная


26. Универсальные методы виджетов

Ниже определены методы для всех виджетов. В описаниях w может быть любым виджетом любого типа.

w.after(delay_ms, callback=None, *args)

Запрашивает Tkinter вызвать функцию callback с аргументами args после задержки не менее delay_ms миллисекунд. Нет верхнего предела того, сколько времени это займет на самом деле, но ваш обратный вызов не будет вызван раньше, чем вы запросите, и он будет вызван только один раз.

Этот метод возвращает целое число (идентификатор after), которое можно передать методу .after_cancel(), если вы хотите отменить обратный вызов.

Если вы не передали аргумент callback, этот метод ожидает delay_ms миллисекунд, как в функции .sleep() из стандартного модуля Python time.

w.after_cancel(id)

Отменяет запрос на обратный вызов, установленный ранее .after(). Аргумент id - это результат, возвращенный исходным вызовом .after().

w.after_idle(func, *args)

Запрашивает, чтобы Tkinter вызвал функцию func с аргументами args в следующий раз, когда система будет простаивать, то есть когда не будет событий для обработки. Обратный вызов будет вызван только один раз. Если вы хотите, чтобы ваш обратный вызов был вызван еще раз, вы должны снова вызвать метод .after_idle.

w.bell()

Издает звук, обычно похожий на гудок.

w.bind(sequence=None, func=None, add=None)

Этот метод используется для привязки события к виджету. Обзор привязок событий см. в Раздел 54, "События".

Аргумент sequence описывает, какое событие мы ожидаем, а аргумент func - это функция, которая будет вызвана, когда это событие произойдет с виджетом. Если для данного виджета уже была привязка для этого события, то обычно старый обратный вызов заменяется на func, но вы можете сохранить оба обратных вызова, передав add='+'.

w.bind_all(sequence=None, func=None, add=None)

Аналогично .bind(), но применяется ко всем виджетам во всем приложении.

w.bind_class(className, sequence=None, func=None, add=None)

Аналогично .bind(), но применяется ко всем виджетам с именем className (например, 'Button').

w.bindtags(tagList=None)

Если вы вызовете этот метод, он вернет "теги привязки" для виджета в виде последовательности строк. Тег привязки - это имя окна (начинающееся с '.') или имя класса (например, 'Listbox').

Вы можете изменить порядок вызова уровней привязки, передав в качестве аргумента последовательность тегов привязки, которую вы хотите, чтобы использовал виджет.

Обсуждение уровней привязки и их связи с тегами см. в Раздел 54, "События".

w.cget(option)

Возвращает текущее значение option в виде строки. Вы также можете получить значение опции для виджета w в виде w[option].

w.clipboard_append(text)

Добавляет заданную строку text в буфер обмена дисплея, где хранятся вырезанные и вставленные строки для всех приложений этого дисплея.

w.clipboard_clear()

Очищает буфер обмена дисплея (см. .clipboard_append() выше).

w.column_configure()

См. раздел Раздел 4.2, "Другие методы управления сеткой".

w.config(option=value, ...)

Аналогично w.configure()(см. ниже).

w.configure(option=value, ...)

Устанавливает значения одной или нескольких опций. Для опций, имена которых являются зарезервированными словами Python (class, from, in), используйте нижнее подчеркивание: 'class_', 'from_', 'in_'.

Вы также можете установить значение опции для виджета w с помощью оператора

w[option] = value

Если вы вызовете метод .config() для виджета без аргументов, вы получите словарь всех текущих опций виджета. Ключи - это имена опций (включая псевдонимы, например bd для borderwidth). Значение каждого ключа:

w.destroy()

Вызов w.destroy() на виджете w уничтожает w и все его дочерние элементы.

w.event_add(virtual, *sequences)

Этот метод создает виртуальное событие, имя которого задается строковым аргументом virtual. Каждый дополнительный аргумент описывает одну последовательность sequence, то есть описание физического события. Когда это событие происходит, запускается новое виртуальное событие.

Общее описание виртуальных событий см. в Раздел 54, "События".

w.event_delete(virtual, *sequences)

Удаляет физические события из виртуального события, имя которого задано строкой virtual. Если из данного виртуального события удалены все физические события, то это виртуальное событие больше не произойдет.

w.event_generate(sequence, **kw)

Этот метод вызывает событие без какого-либо внешнего стимула. Обработка события происходит так же, как если бы оно было вызвано внешним стимулом. Аргумент sequence описывает событие, которое должно быть вызвано. Вы можете задать значения для выбранных полей объекта Event, предоставив аргументы keyword`=value, где keyword указывает имя поля в объекте Event.

Полное обсуждение событий см. в Раздел 54, "События".

w.event_info(virtual=None)

Если вы вызовете этот метод без аргумента, то получите в ответ последовательность всех определенных в данный момент имен виртуальных событий.

Чтобы получить физические события, связанные с виртуальным событием, передайте этому методу имя виртуального события, и вы получите последовательность физических имен sequence, или None, если данное виртуальное событие никогда не было определено.

w.focus_displayof()

Возвращает имя окна, которое в данный момент имеет фокус ввода на том же дисплее, что и виджет. Если ни одно из таких окон не имеет фокуса ввода, возвращается None.

Общее описание фокуса ввода см. в Раздел 53, "Фокус: маршрутизация ввода с клавиатуры".

w.focus_force()

Принудительное перемещение фокуса ввода на виджет. Это невежливо. Лучше подождать, пока оконный менеджер передаст вам фокус. См. также .grab_set_global() ниже.

w.focus_get()

Возвращает виджет, имеющий фокус в данном приложении, если таковой имеется - в противном случае возвращается None.

w.focus_lastfor()

Этот метод извлекает имя виджета, который последним имел фокус ввода в окне верхнего уровня, содержащем w. Если ни один из виджетов этого верхнего уровня никогда не имел фокуса ввода, то возвращается имя виджета верхнего уровня. Если у этого приложения нет фокуса ввода, .focus_lastfor() вернет имя виджета, который получит фокус в следующий раз, когда вернется к этому приложению.

w.focus_set()

Если приложение w имеет фокус ввода, то фокус перейдет к w. Если приложение w не имеет фокуса, Tk вспомнит, что нужно передать его w в следующий раз, когда приложение получит фокус.

w.grab_current()

Если для дисплея w действует захват (grab), возвращает его идентификатор, в противном случае возвращает None. Обсуждение захватов см. в Раздел 54, "События".

w.grab_release()

Если в w действует захват, освободить его.

w.grab_set()

Виджет w захватывает все события для приложения w. Если действовал другой захват, он исчезает. Обсуждение захватов см. в Раздел 54, "События".

w.grab_set_global()

Виджет w захватывает все события для всего экрана. Это считается невежливым и должно использоваться только в случае крайней необходимости. Любой другой захват в силе. Постарайтесь использовать эту потрясающую силу только для сил добра и никогда для сил зла, хорошо?

w.grab_status()

Если действует локальный захват (заданный командой .grab_set()), этот метод возвращает строку 'local'. Если действует глобальный захват (установленный с помощью .grab_set_global()), то возвращается строка 'global'. Если захват не действует, возвращается None.

w.grid_forget()

См. раздел Раздел 4.2, "Другие методы управления сеткой".

w.grid_propagate()

См. раздел Раздел 4.2, "Другие методы управления сеткой".

w.grid_remove()

См. раздел Раздел 4.2, "Другие методы управления сеткой".

w.image_names()

Возвращает имена всех изображений в приложении w в виде последовательности строк.

w.keys()

Возвращает имена опций для виджета в виде последовательности строк.

w.lift(aboveThis=None)

Если аргумент равен None, то окно, содержащее w, перемещается в верхнюю часть стека окон. Чтобы переместить окно непосредственно над некоторым Toplevel окном w, передайте w в качестве аргумента.

w.lower(belowThis=None)

Если аргумент равен None, окно, содержащее w, перемещается в самый низ порядка стекания окон. Чтобы переместить окно чуть ниже некоторого Toplevel окна w, передайте w в качестве аргумента.

w.mainloop()

Этот метод должен быть вызван, как правило, после создания всех статических виджетов, чтобы начать обработку событий. Вы можете выйти из главного цикла с помощью метода .quit() (см. ниже). Вы также можете вызвать этот метод внутри обработчика событий, чтобы возобновить работу главного цикла.

w.nametowidget(name)

Этот метод возвращает актуальный виджет, чье имя пути равно name. Смотрите Раздел 5.11, "Имена окон". Если name неизвестно, этот метод вызовет KeyError.

w.option_add(pattern, value, priority=None)

Этот метод добавляет значения опций по умолчанию в базу данных опций Tkinter. Шаблон pattern - это строка, задающая значение по умолчанию для опций одного или нескольких виджетов. Значения priority являются одними из:

20 Для глобальных свойств виджетов по умолчанию.
40 Для свойств по умолчанию конкретных приложений.
60 Для опций, полученных из пользовательских файлов, таких как файл .Xdefaults.
80 Для параметров, которые устанавливаются после запуска приложения. Это уровень приоритета по умолчанию.

Приоритеты более высокого уровня имеют приоритет над приоритетами более низкого уровня. Обзор базы данных опций см. в Раздел 27, "Стандартизация внешнего вида". Синтаксис аргумента pattern для .option_add() такой же, как и у option-pattern в строке спецификации ресурса.

Например, чтобы получить эффект от этой строки спецификации ресурса:

\*Button\*font: times 24 bold

ваше приложение (в данном примере self) может включить следующие строки:

self.bigFont = tkFont.Font(family='times', size=24, weight='bold')
self.option\_add('\*Button\*font', self.bigFont)

Любые виджеты Button, созданные после выполнения этих строк, по умолчанию будут использовать полужирный шрифт Times 24 (если не переопределить опцию font в конструкторе Button).

w.option_clear()

Этот метод удаляет все опции из базы данных опций Tkinter. В результате все опции возвращаются к значениям по умолчанию.

w.option_get(name, classname)

Этот метод используется для получения текущего значения опции из базы данных опций Tkinter. Первым аргументом является ключ экземпляра, а вторым - ключ класса. Если есть совпадения, возвращается значение опции, которая лучше всего подходит. Если совпадений нет, возвращается ''.

Подробнее о том, как ключи сопоставляются с опциями, см. в Раздел 27, "Стандартизация внешнего вида".

w.option_readfile(fileName, priority=None)

Для удобства пользовательской конфигурации вы можете назначить именованный файл, в который пользователи могут поместить свои предпочтительные опции, используя тот же формат, что и в файле .Xdefaults. Затем, когда ваше приложение инициализируется, вы можете передать имя этого файла в этот метод, и опции из этого файла будут добавлены в базу данных. Если файл не существует или его формат неверен, этот метод вызовет ошибку tk.TclError.

См. раздел Раздел 27, "Стандартизация внешнего вида" для ознакомления с базой данных опций и форматом файлов опций.

w.register(function)

Этот метод создает Tcl-обертку вокруг функции Python и возвращает имя Tcl-обертки в виде строки. Пример использования этого метода приведен в Раздел 10.2, "Добавление валидации в виджет Entry".

w.quit()

Этот метод завершает работу главного цикла. Обсуждение главного цикла см. в разделе .mainloop(), выше.

w.rowconfigure()

См. раздел Раздел 4.2, "Другие методы управления сеткой".

w.selection_clear()

Если в данный момент в w есть выделение (например, выделенный фрагмент текста в виджете ввода), снимите это выделение.

w.selection_get()

Если в данный момент в w есть выделение, этот метод возвращает выделенный текст. Если выделения нет, то возникает ошибка tk.TclError.

w.selection_own()

Делает w владельцем выделения в отображении w, забирая его у предыдущего владельца, если таковой имеется.

w.selection_own_get()

Возвращает виджет, которому в данный момент принадлежит выделение на экране w. Вызывает tk.TclError, если такого выделения не существует.

w.tk_focusFollowsMouse()

Обычно фокус ввода проходит через последовательность виджетов, определяемую их иерархией и порядком создания; смотрите Раздел 53, "Фокус: маршрутизация ввода с клавиатуры". Вместо этого вы можете указать Tkinter, что фокус будет находиться там, где находится мышь; просто вызовите этот метод. Однако нет простого способа отменить это.

w.tk_focusNext()

Возвращает виджет, следующий за w в последовательности обхода фокуса. Обсуждение обхода фокуса см. в Раздел 53, "Фокус: маршрутизация ввода с клавиатуры".

w.tk_focusPrev()

Возвращает виджет, который предшествует w в последовательности обхода фокуса.

w.unbind(sequence, funcid=None)

Этот метод удаляет привязки к w для события, описанного sequence. Если второй аргумент является обратным вызовом, привязанным к этой последовательности, то этот обратный вызов удаляется, а остальные, если они есть, остаются на месте. Если второй аргумент опущен, все привязки удаляются.

Общее обсуждение привязок к событиям см. ниже в Раздел 54, "События".

w.unbind_all(sequence)

Удаляет все привязки событий в приложении для события, описанного заданной 'sequence'.

w.unbind_class(className, sequence)

Аналогично .unbind(), но применяется ко всем виджетам с именем className (например, 'Entry' или 'Listbox').

w.update()

Этот метод принудительно обновляет дисплей. Его следует использовать только в том случае, если вы знаете, что делаете, поскольку он может привести к непредсказуемому поведению или зацикливанию. Его никогда не следует вызывать из обратного вызова события или функции, которая вызывается из обратного вызова события.

w.update_idletasks()

Некоторые задачи обновления дисплея, такие как изменение размеров и перерисовка виджетов, называются idle tasks, потому что они обычно откладываются до тех пор, пока приложение не закончит обработку событий и не вернется в главный цикл для ожидания новых событий.

Если вы хотите заставить дисплей обновляться до того, как приложение перейдет в режим ожидания, вызовите метод w.update_idletasks() для любого виджета.

w.wait_variable(v)

Ждет, пока значение переменной v не будет установлено, даже если значение не изменяется. Этот метод входит в локальный цикл ожидания, поэтому он не блокирует работу остальной части приложения.

w.wait_visibility(w)

Подождать, пока виджет w (обычно Toplevel) станет видимым.

w.wait_window(w)

Подождите, пока окно w не будет уничтожено.

w.winfo_children()

Возвращает список всех дочерних окон w в порядке их расположения от самого низкого (нижнего) до самого высокого (верхнего).

w.winfo_class()

Возвращает имя класса w (например, 'Button').

w.winfo_containing(rootX, rootY, displayof=0)

Этот метод используется для поиска окна, содержащего точку (rootX, rootY). Если параметр displayof равен false, координаты определяются относительно корневого окна приложения; если true, координаты считаются относительными к окну верхнего уровня, содержащему w. Если указанная точка находится в одном из окон верхнего уровня приложения, метод возвращает это окно; в противном случае он возвращает None.

w.winfo_depth()

Возвращает количество бит на пиксель в отображении w.

w.winfo_fpixels(number)

Для любой размерности number (см. Раздел 5.1, "Размеры") этот метод возвращает это расстояние в пикселях на дисплее w в виде числа типа float.

w.winfo_geometry()

Возвращает строку геометрии, описывающую размер и расположение w на экране. Смотрите Раздел 5.10, " Строки геометрии".

Внимание!

Геометрия не является точной до тех пор, пока приложение не обновит свои незадействованные задачи. В частности, все геометрии изначально имеют вид '1x1+0+0', пока виджеты и менеджер геометрии не согласуют свои размеры и позиции. Как убедиться, что геометрия виджета актуальна, смотрите метод .update_idletasks(), приведенный выше в этом разделе.

w.winfo_height()

Возвращает текущую высоту w в пикселях. См. замечания по обновлению геометрии в разделе .winfo_geometry(), выше. Вы можете предпочесть использовать .winfo_reqheight(), описанную ниже, которая всегда актуальна.

w.winfo_id()

Возвращает целое число, которое однозначно идентифицирует w в пределах окна верхнего уровня. Оно понадобится для метода .winfo_pathname(), описанного ниже.

w.winfo_ismapped()

Этот метод возвращает true, если виджет w отображен, false - в противном случае. Виджет отображается, если он был помещен в сетку (или размещен, или упакован, если вы используете один из других менеджеров геометрии) в своем родителе, и если его родитель отображается, и так далее вплоть до окна верхнего уровня.

w.winfo_manager()

Если w не было отображено на сетке (или размещено с помощью одного из других менеджеров геометрии), этот метод возвращает пустую строку. Если w был размещен на сетке или иным образом, то возвращается строка с названием менеджера геометрии для w: это значение будет одним из 'grid', 'pack', 'place', 'canvas' или 'text'.

w.winfo_name()

Этот метод возвращает имя w относительно его родителя. Смотрите Раздел 5.11, "Имена окон". Также смотрите .winfo_pathname(), ниже, чтобы узнать, как получить имя пути виджета.

w.winfo_parent()

Возвращает имя пути родителя w, или пустую строку, если w является окном верхнего уровня. Подробнее об именах путей виджетов см. в Раздел 5.11, "Имена окон" выше.

w.winfo_pathname(id, displayof=0)

Если аргумент displayof равен false, возвращает имя пути к окну виджета с уникальным идентификатором id в главном окне приложения. Если displayof равен true, то номер id указывает на виджет в том же окне верхнего уровня, что и w. Обсуждение путей к именам виджетов см. в Раздел 5.11, "Имена окон".

w.winfo_pixels(number)

Для любого размера number (см. раздел "Размеры", выше) этот метод возвращает это расстояние в пикселях на экране w в виде целого числа.

w.winfo_pointerx()

Возвращает то же значение, что и координата x, возвращаемая методом .winfo_pointerxy().

w.winfo_pointerxy()

Возвращает кортеж (x, y), содержащий координаты указателя мыши относительно корневого окна w. Если указатель мыши находится не на том же экране, возвращается (-1, -1).

w.winfo_pointery()

Возвращает то же значение, что и координата y, возвращаемая функцией .winfo_pointerxy().

w.winfo_reqheight()

Эти методы возвращают запрашиваемую высоту виджета w. Это минимальная высота, необходимая для того, чтобы все содержимое w имело необходимое пространство. Фактическая высота может быть другой из-за согласования с менеджером геометрии.

w.winfo_reqwidth()

Возвращает запрашиваемую ширину виджета w, минимальную ширину, необходимую для размещения w. Как и в случае с .winfo_reqheight(), фактическая ширина может быть другой из-за согласования с менеджером геометрии.

w.winfo_rgb(color)

Для любого заданного цвета этот метод возвращает эквивалентную спецификацию красно-зелено-синего цвета в виде 3-кортежа (r, g, b), где каждое число является целым числом в диапазоне [0, 65536). Например, если color - 'green', этот метод возвращает 3-кортеж (0, 65535, 0).

Подробнее о задании цветов см. в Раздел 5.3, "Цвета".

w.winfo_rootx()

Возвращает координаты x левой стороны корневого окна w относительно родителя w.

Если у w есть граница, то это внешний край границы.

w.winfo_rooty()

Возвращает координату y верхней стороны корневого окна w относительно родителя w.

Если у w есть граница, то это верхний край границы.

w.winfo_screenheight()

Возвращает высоту экрана в пикселях.

w.winfo_screenmmheight()

Возвращает высоту экрана в миллиметрах.

w.winfo_screenmmwidth()

Возвращает ширину экрана в миллиметрах.

w.winfo_screenvisual()

Возвращает строку, описывающую метод цветопередачи дисплея. Обычно это 'truecolor' для 16- или 24-битных дисплеев, 'pseudocolor' для 256-цветных дисплеев.

w.winfo_screenwidth()

Возвращает ширину экрана в пикселях.

w.winfo_toplevel()

Возвращает окно верхнего уровня, содержащее w. Это окно поддерживает все методы виджетов Toplevel; см. Раздел 25, "Toplevel: методы окон верхнего уровня".

w.winfo_viewable()

Предикат, возвращающий значение True, если w доступно для просмотра, то есть если оно и все его предки в том же Toplevel отображены.

w.winfo_width()

Возвращает текущую ширину w в пикселях. См. замечания по обновлению геометрии в разделе .winfo_geometry(), выше. Вы можете предпочесть использовать метод .winfo_reqwidth(), описанный выше; он всегда актуален.

w.winfo_x()

Возвращает координату x левой стороны w относительно его родителя. Если у w есть граница, то это внешний край границы.

w.winfo_y()

Возвращает координату y верхней стороны w относительно его родителя. Если у w есть граница, это внешний край границы.


>> Стандартизация внешнего вида и база данных опций