tkinter — Python-интерфейс к Tcl/Tk
Исходный код: Lib/tkinter/__init__.py
Пакет tkinter («Tk-интерфейс») является стандартным Python-интерфейсом к набору инструментов Tk GUI. Tk и tkinter доступны на большинстве платформ Unix, а также на системах Windows. (Сам Tk не является частью Python; он поддерживается компанией ActiveState.)
Запуск python -m tkinter из командной строки должен открыть окно, демонстрирующее простой Tk-интерфейс, показывая, что tkinter правильно установлен на вашей системе, а также показывая, какая версия Tcl/Tk установлена, чтобы вы могли прочитать документацию по Tcl/Tk, специфичную для этой версии.
См. также
Документация Tkinter:
- Python Tkinter Resources
-
Руководство по теме Python Tkinter содержит много информации об использовании Tk из Python и ссылки на другие источники информации о Tk.
- TKDocs
-
Подробный учебник плюс страницы с более дружественными виджетами для некоторых виджетов.
- Tkinter 8.5 справочник: графический интерфейс пользователя для Python
-
Справочный материал онлайн.
- Документация Tkinter от effbot
-
Справочная информация онлайн, поддерживаемая effbot.org.
- Programming Python
-
Книга Марка Лутца, которая содержит отличное описание Tkinter.
- Modern Tkinter for Busy Python Developers
-
Книга Марка Роземана о создании привлекательных и современных графических пользовательских интерфейсов с Python и Tkinter.
- Python and Tkinter Programming
-
Книга Джона Грейсона (ISBN 1-884777-81-3).
Документация Tcl/Tk:
- Команды Tk
-
Большинство команд доступны как классы
tkinterилиtkinter.ttk. Замените ‘8.6’ на соответствующую версии вашей установки Tcl/Tk. - Последние руководства Tcl/Tk
-
Последние руководства Tcl/Tk на сайте www.tcl.tk.
- Главная страница ActiveState Tcl
-
Разработка Tk/Tcl в основном происходит в ActiveState.
- Tcl and the Tk Toolkit
-
Книга Джона Остерхаута, изобретателя Tcl.
- Practical Programming in Tcl and Tk
-
Энциклопедическая книга Брента Уэлча.
Модули Tkinter
Большую часть времени tkinter вам действительно нужно, но есть и ряд дополнительных модулей. Tk-интерфейс находится в двоичном модуле, названном _tkinter. Этот модуль содержит низкоуровневый интерфейс к Tk и его никогда не следует использовать напрямую программистам приложений. Обычно это общая библиотека (или DLL), но в некоторых случаях может быть статически связана с интерпретатором Python.
Помимо модуля интерфейса Tk, tkinter включает в себя ряд Python-модулей, tkinter.constants является одним из самых важных. Импорт tkinter автоматически импортирует tkinter.constants, поэтому обычно для использования Tkinter достаточно простого оператора импорта:
import tkinter
Или, чаще:
from tkinter import *
-
class tkinter.Tk(screenName=None, baseName=None, className='Tk', useTk=1) -
Класс
Tkсоздается без аргументов. Это создает виджет верхнего уровня Tk, который обычно является основным окном приложения. Каждый экземпляр имеет свой связанный интерпретатор Tcl.
-
tkinter.Tcl(screenName=None, baseName=None, className='Tk', useTk=0) -
Функция
Tcl()— это функция-фабрика, которая создает объект, очень похожий на тот, что создается классомTk, за исключением того, что она не инициализирует подсистему Tk. Это чаще всего полезно при работе с интерпретатором Tcl в среде, где не нужно создавать лишние окна верхнего уровня, или где это невозможно (например, на системах Unix/Linux без сервера X). Объект, созданный объектомTcl(), может иметь окно Toplevel (и подсистему Tk инициализирована) вызовом методаloadtk().
Другие модули, которые предоставляют поддержку Tk, включают:
-
tkinter.scrolledtext -
Виджет «Текст» со встроенной вертикальной полосой прокрутки.
-
tkinter.colorchooser -
Диалоговое окно, позволяющее пользователю выбрать цвет.
-
tkinter.commondialog -
Базовый класс для диалоговых окон, определённых в других модулях, перечисленных здесь.
-
tkinter.filedialog -
Общие диалоговые окна, позволяющие пользователю указать файл для открытия или сохранения.
-
tkinter.font -
Утилиты для работы с шрифтами.
-
tkinter.messagebox -
Доступ к стандартным диалоговым окнам Tk.
-
tkinter.simpledialog -
Базовые диалоговые окна и вспомогательные функции.
-
tkinter.dnd -
Поддержка перетаскивания для
tkinter. Это экспериментально и должно стать устаревшим, когда оно будет заменено Tk DND. -
turtle -
Графика черепахи в окне Tk.
Справочник Tkinter
Этот раздел не предназначен для того, чтобы стать исчерпывающим руководством по Tk или Tkinter. Скорее, он предназначен как временная мера, предоставляя некоторое начальное ознакомление с системой.
Благодарности:
- Tk был написан Джоном Остерхаутом в Беркли.
- Tkinter был написан Стёном Люмхолтом и Гвидо ван Россумом.
- Этот справочник был написан Мэттом Конвеем в Университете Вирджинии.
- Отрисовка HTML и некоторые либеральные правки были созданы из версии FrameMaker Кеном Мэнхаймером.
- Фредрик Лундх расширил и переработал описания интерфейса класса, чтобы сделать их актуальными для Tk 4.2.
- Майк Кларксон конвертировал документацию в LaTeX и скомпилировал главу «Пользовательский интерфейс» справочного руководства.
Как пользоваться этим разделом
Этот раздел разработан в двух частях: первая половина (приблизительно) охватывает справочный материал, в то время как во второй половине можно получить доступ к документации.
При попытке ответить на вопросы типа «как сделать бла-бла», часто лучше всего выяснить, как сделать «бла-бла» в чистом Tk, а затем преобразовать это в соответствующий вызов tkinter. Программисты Python часто могут догадаться о правильной Python-команде, посмотрев документацию Tk. Это означает, что для использования Tkinter вам нужно будет немного узнать о Tk. Этот документ не может выполнить эту роль, поэтому мы можем лишь указать вам на лучшие существующие документы. Вот несколько советов:
- Авторы настоятельно рекомендуют получить копию страниц справки Tk. В частности, страницы справки в каталоге
manNнаиболее полезны. Страницы справкиman3описывают C-интерфейс библиотеки Tk и поэтому не очень полезны для писателей скриптов. - Издательство Addison-Wesley публикует книгу «Tcl and the Tk Toolkit» Джона Остерхаута (ISBN 0-201-63337-X), которая является хорошим введением в Tcl и Tk для начинающих. Книга не исчерпывающая, и во многих деталях ссылается на страницы справки.
-
tkinter/__init__.py— это крайняя мера для большинства, но может быть хорошим местом для поиска, когда ничего другого не имеет смысла.
Простая программа «Привет, мир»
import tkinter as tk
class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.pack()
self.create_widgets()
def create_widgets(self):
self.hi_there = tk.Button(self)
self.hi_there["text"] = "Hello World\n(click me)"
self.hi_there["command"] = self.say_hi
self.hi_there.pack(side="top")
self.quit = tk.Button(self, text="QUIT", fg="red",
command=self.master.destroy)
self.quit.pack(side="bottom")
def say_hi(self):
print("hi there, everyone!")
root = tk.Tk()
app = Application(master=root)
app.mainloop()
Быстрый взгляд на Tcl/Tk
Иерархия классов выглядит сложной, но на практике программисты приложений почти всегда обращаются к классам в самом низу иерархии.
Примечания:
- Эти классы предоставляются для организации определенных функций под одним именем пространства. Они не предназначены для независимого создания экземпляров.
- Класс
Tkпредназначен для создания экземпляров только один раз в приложении. Программистам приложений не нужно создавать его явно, система создаёт его всякий раз, когда создаётся любой из других классов. - Класс
Widgetне предназначен для создания экземпляров, он предназначен только для наследования, чтобы создавать «реальные» виджеты (в C++, это называется «абстрактный класс»).
Для использования этого справочного материала, вам иногда потребуется знать, как читать короткие фрагменты Tk и как определить различные части команды Tk. (См. раздел Сопоставление основных Tk с Tkinter для эквивалентов tkinter того, что показано ниже.)
Tk скрипты представляют собой программы Tcl. Как и все программы Tcl, Tk скрипты представляют собой просто списки токенов, разделенных пробелами. Tk виджет — это просто его класс, параметры, которые помогают его настроить, и действия, которые заставляют его выполнять полезные операции.
Чтобы создать виджет в Tk, команда всегда имеет вид:
classCommand newPathname options
- classCommand
-
указывает, какой виджет создавать (кнопку, метку, меню…)
- newPathname
-
является новым именем этого виджета. Все имена в Tk должны быть уникальными. Для обеспечения этого виджеты в Tk имеют имена с путями, как и файлы в файловой системе. Корневой виджет, root, называется
.(точка), а дочерние элементы разделяются точками. Например,.myApp.controlPanel.okButtonможет быть именем виджета. - options
-
конфигурируют внешний вид виджета, а в некоторых случаях и его поведение. Параметры представлены в виде списка флагов и значений. Флаги предваряются символом «-», как флаги команд оболочки Unix, а значения заключаются в кавычки, если они состоят более чем из одного слова.
Например:
button .fred -fg red -text "hi there" ^ ^ \______________________/ | | | class new options command widget (-opt val -opt val ...)
После создания путь к виджету становится новой командой. Эта новая команда виджета — это инструмент программиста для управления новым виджетом и выполнения с ним действий. В C это выражается как someAction(fred, someOptions), в C++ — как fred.someAction(someOptions), а в Tk — как:
.fred someAction someOptions
Обратите внимание, что имя объекта, .fred, начинается с точки.
Как ожидается, допустимые значения для someAction будут зависеть от класса виджета: .fred disable работает, если fred — кнопка (fred становится серым), но не работает, если fred — метка (отключение меток в Tk не поддерживается).
Допустимые значения someOptions зависят от действия. Некоторые действия, как disable, не требуют аргументов, другие, например, команда delete текстового поля ввода, требуют аргументов для указания диапазона удаляемого текста.
Сопоставление базовых Tk с Tkinter
Команды классов в Tk соответствуют конструкторам классов в Tkinter.
button .fred =====> fred = Button()
Родительский объект неявный в новом имени, данном ему при создании. В Tkinter родительские объекты указываются явно.
button .panel.fred =====> fred = Button(panel)
Параметры конфигурации в Tk задаются в списках помеченных тире тегов, за которыми следуют значения. В Tkinter параметры указываются как ключевые аргументы в конструкторе экземпляра, и ключевые аргументы для вызовов configure или как индексы экземпляра в стиле словаря для созданных экземпляров. См. раздел Установка параметров по установке параметров.
button .fred -fg red =====> fred = Button(panel, fg="red")
.fred configure -fg red =====> fred["fg"] = red
OR ==> fred.config(fg="red")
В Tk для выполнения действия над виджетом используйте имя виджета как команду и следуйте за ним именем действия, возможно, с аргументами (параметрами). В Tkinter вызывайте методы экземпляра класса для вызова действий над виджетом. Действия (методы), которые может выполнить данный виджет, перечислены в tkinter/__init__.py.
.fred invoke =====> fred.invoke()
Чтобы передать виджет в упаковщик (менеджер геометрии), вызывайте pack с необязательными аргументами. В Tkinter класс Pack содержит всю эту функциональность, а различные формы команды pack реализованы как методы. Все виджеты в tkinter являются подклассами Packer и, следовательно, наследуют все методы упаковки. См. документацию модуля tkinter.tix для дополнительной информации о менеджере геометрии Form.
pack .fred -side left =====> fred.pack(side="left")
Как Tk и Tkinter связаны
Сверху вниз:
- Ваше приложение здесь (Python)
-
Приложение Python выполняет вызов
tkinter. - tkinter (Пакет Python)
-
Этот вызов (например, создание виджета кнопки) реализован в пакете
tkinter, написанном на Python. Эта функция Python проанализирует команды и аргументы и преобразует их в формат, который заставит их выглядеть так, как будто они пришли из Tk скрипта, а не из скрипта Python. - _tkinter (C)
-
Эти команды и их аргументы будут переданы функции C в модуле расширения
_tkinter— обратите внимание на подчёркивание —. - Tk Виджеты (C и Tcl)
-
Эта функция C способна вызывать другие модули C, включая функции C, которые составляют библиотеку Tk. Tk реализован на C и частично на Tcl. Часть Tcl виджетов Tk используется для привязки некоторых стандартных действий к виджетам и выполняется один раз в момент импорта пакета Python
tkinter. (Пользователь этого этапа не видит). - Tk (C)
-
Часть Tk виджетов Tk выполняет окончательное сопоставление…
- Xlib (C)
-
библиотеке Xlib для отрисовки графики на экране.
Полезная справка
Установка параметров
Параметры управляют такими вещами, как цвет и ширина рамки виджета. Параметры можно установить тремя способами:
- При создании объекта, используя ключевые аргументы
-
fred = Button(self, fg="red", bg="blue")
- После создания объекта, рассматривая имя параметра как индекс словаря
-
fred["fg"] = "red" fred["bg"] = "blue"
- Используйте метод config() для обновления нескольких атрибутов после создания объекта
-
fred.config(fg="red", bg="blue")
Для полного объяснения заданного параметра и его поведения см. страницы справки Tk для соответствующего виджета.
Обратите внимание, что страницы справки перечисляют «СТАНДАРТНЫЕ ПАРАМЕТРЫ» и «СПЕЦИФИЧЕСКИЕ ДЛЯ ВИДЖЕТА ПАРАМЕТРЫ» для каждого виджета. Первое — список параметров, общих для многих виджетов, второе — параметры, специфичные для этого виджета. Стандартные параметры документированы на странице справки options(3).
В этом документе различия между стандартными и специфическими для виджета параметрами не делается. Некоторые параметры не применяются к некоторым видам виджетов. Реагирует ли данный виджет на конкретный параметр, зависит от класса виджета; кнопки имеют параметр command, метки — нет.
Поддерживаемые виджетом параметры перечислены на странице справки этого виджета или могут быть запрошены во время выполнения, вызвав метод config() без аргументов или метод keys() на этом виджете. Результатом этих вызовов является словарь, ключ которого — имя параметра в виде строки (например, 'relief'), а значения — 5-кортежи.
Некоторые параметры, такие как bg, являются синонимами распространённых параметров с длинными именами (bg — сокращение от «background»). Передача методу config() имени сокращенного параметра вернёт 2-кортеж, а не 5-кортеж. 2-кортеж, возвращённый обратно, будет содержать имя синонима и «реальный» параметр (например, ('bg', 'background')).
Индекс | Значение | Пример |
|---|---|---|
0 | имя параметра |
|
1 | имя параметра для поиска в базе данных |
|
2 | класс параметра для поиска в базе данных |
|
3 | значение по умолчанию |
|
4 | текущее значение |
|
Пример:
>>> print(fred.config())
{'relief': ('relief', 'relief', 'Relief', 'raised', 'groove')}
Конечно, распечатанный словарь будет включать все доступные параметры и их значения. Это лишь пример.
Упаковщик
Упаковщик — один из механизмов управления геометрией Tk. Менеджеры геометрии используются для указания относительного расположения виджетов внутри их контейнера — их общего родителя. В отличие от более громоздкого размещателя (который используется реже и не рассматривается здесь), упаковщик принимает качественные указания на отношения — над, слева от, заполнить и т. д. — и вычисляет точные координаты размещения.
Размер любого виджета-родителя определяется размером «вложенных виджетов» внутри. Упаковщик используется для управления тем, где появятся вложенные виджеты внутри родительского виджета, в который они упакованы. Вы можете упаковывать виджеты в фреймы, а фреймы — в другие фреймы, чтобы добиться желаемого макета. Кроме того, расположение динамически корректируется для учёта постепенных изменений конфигурации после упаковки.
Обратите внимание, что виджеты не отображаются, пока не будут указаны их геометрические характеристики с помощью менеджера геометрии. Обычно, это ошибка, которую допускают на ранних этапах — пропуск указания геометрии, а затем удивление, когда виджет создан, но ничего не отображается. Виджет отобразится только после применения к нему, например, метода pack() упаковщика.
Метод pack() можно вызывать с парами ключевых параметров/значений, которые управляют тем, где должен появиться виджет в контейнере и как он должен вести себя при изменении размеров основного окна приложения. Вот несколько примеров:
fred.pack() # defaults to side = "top" fred.pack(side="left") fred.pack(expand=1)
Параметры упаковщика
Для более подробной информации об упаковщике и параметрах, которые он может принимать, обратитесь к страницам справки и странице 183 книги Джона Аустерхаута.
- anchor
-
Тип якоря. Указывает, где упаковщик должен разместить каждый вложенный элемент в своём участке.
- expand
-
Булево,
0или1. - fill
-
Допустимые значения:
'x','y','both','none'. - ipadx и ipady
-
Расстояние — обозначающее внутреннее отступы с каждой стороны вложенного виджета.
- padx и pady
-
Расстояние — обозначающее внешний отступ с каждой стороны вложенного виджета.
- side
-
Допустимые значения:
'left','right','top','bottom'.
Связывание переменных виджетов
Текущее значение некоторых виджетов (например, виджетов текстового ввода) можно напрямую связать с переменными приложения, используя специальные параметры. Эти параметры — variable, textvariable, onvalue, offvalue, и value. Эта связь работает в обе стороны: если переменная изменяется по какой-либо причине, виджет, к которому она привязана, будет обновлён, отражая новое значение.
К сожалению, в текущей реализации tkinter невозможно передать произвольную переменную Python виджету через опцию variable или textvariable. Единственные типы переменных, с которыми это работает, — переменные, являющиеся подклассами класса Variable, определённого в tkinter.
Уже определено много полезных подклассов Variable: StringVar, IntVar, DoubleVar, и BooleanVar. Чтобы прочитать текущее значение такой переменной, вызовите метод get() для неё, а чтобы изменить её значение, вызовите метод set(). Если вы следуете этому протоколу, виджет будет отслеживать значение переменной без дополнительного вмешательства с вашей стороны.
Например:
class App(Frame):
def __init__(self, master=None):
super().__init__(master)
self.pack()
self.entrythingy = Entry()
self.entrythingy.pack()
# here is the application variable
self.contents = StringVar()
# set it to some value
self.contents.set("this is a variable")
# tell the entry widget to watch this variable
self.entrythingy["textvariable"] = self.contents
# and here we get a callback when the user hits return.
# we will have the program print out the value of the
# application variable when the user hits return
self.entrythingy.bind('<Key-Return>',
self.print_contents)
def print_contents(self, event):
print("hi. contents of entry is now ---->",
self.contents.get())
Менеджер окон
В Tk существует утилитарная команда wm, для взаимодействия с менеджером окон. Опции команды wm позволяют управлять такими вещами, как заголовки, расположение, значки и тому подобное. В tkinter эти команды реализованы как методы класса Wm. Виджеты верхнего уровня являются подклассами класса Wm и, таким образом, могут вызывать методы Wm напрямую.
Чтобы получить окно верхнего уровня, содержащее данный виджет, вы часто можете просто обратиться к master виджета. Конечно, если виджет был размещён внутри фрейма, master не будет представлять окно верхнего уровня. Чтобы получить окно верхнего уровня, содержащее произвольный виджет, вы можете вызвать метод _root(). Этот метод начинается с символа подчёркивания, чтобы обозначить, что эта функция является частью реализации, а не интерфейсом к функциональности Tk.
Вот несколько примеров типичного использования:
import tkinter as tk
class App(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.pack()
# create the application
myapp = App()
#
# here are method calls to the window manager class
#
myapp.master.title("My Do-Nothing Application")
myapp.master.maxsize(1000, 400)
# start the program
myapp.mainloop()
Типы данных опций Tk
- anchor
-
Допустимые значения — точки компаса:
"n","ne","e","se","s","sw","w","nw", а также"center". - bitmap
-
Есть восемь встроенных значков:
'error','gray25','gray50','hourglass','info','questhead','question','warning'. Чтобы указать имя X bitmap-файла, укажите полный путь к файлу, предваряемый@, как в"@/usr/contrib/bitmap/gumby.bit". - boolean
-
Можно передать целые числа 0 или 1 или строки
"yes"или"no". - callback
-
Любая функция Python, которая не принимает аргументы. Например:
def print_it(): print("hi there") fred["command"] = print_it - color
-
Цвета могут быть заданы как имена X-цветов в файле rgb.txt или как строки, представляющие значения RGB в 4-битовом:
"#RGB", 8-битовом:"#RRGGBB", 12-битовом"#RRRGGGBBB", или 16-битовом"#RRRRGGGGBBBB"диапазонах, где R,G,B представляют любые допустимые шестнадцатеричные цифры. Подробности см. на странице 160 книги Остерхауса. - cursor
-
Можно использовать стандартные имена X курсоров из
cursorfont.h, без префиксаXC_. Например, чтобы получить курсор руки (XC_hand2), используйте строку"hand2". Также можно указать собственный файл bitmap и mask. См. страницу 179 книги Остерхауса. - distance
-
Расстояния на экране могут быть заданы в пикселях или в абсолютных единицах. Пиксели задаются числами, а абсолютные расстояния — строками с символом единиц в конце:
cдля сантиметров,iдля дюймов,mдля миллиметров,pдля типографских пунктов. Например, 3,5 дюйма записываются как"3.5i". - font
-
Tk использует формат имени шрифта в виде списка, например
{courier 10 bold}. Размеры шрифтов с положительными числами измеряются в пунктах; размеры с отрицательными числами — в пикселях. - geometry
-
Это строка вида
widthxheight, где ширина и высота измеряются в пикселях для большинства виджетов (в символах для виджетов, отображающих текст). Например:fred["geometry"] = "200x100". - justify
-
Допустимые значения — строки:
"left","center","right", и"fill". - region
-
Это строка с четырьмя элементами, разделёнными пробелами, каждый из которых является допустимым расстоянием (см. выше). Например:
"2 3 4 5"и"3i 2i 4.5i 2i"и"3c 2c 4c 10.43c"— все допустимые области. - relief
-
Определяет стиль границы виджета. Допустимые значения:
"raised","sunken","flat","groove", и"ridge". - scrollcommand
-
Практически всегда метод
set()какого-либо виджета скроллбара, но может быть любым методом виджета, принимающим один аргумент. - wrap:
-
Должно быть одним из:
"none","char", или"word".
Связывания и события
Метод bind из команды виджета позволяет следить за определёнными событиями и вызывать функцию обратного вызова при возникновении такого типа события. Формат метода bind:
def bind(self, sequence, func, add=''):
где:
- sequence
-
— строка, обозначающая целевой тип события. (См. страницу man для bind и страницу 201 книги Джона Остерхауса для получения более подробной информации).
- func
-
— функция Python, принимающая один аргумент, которая должна быть вызвана при возникновении события. В качестве аргумента будет передано экземпляр события. (Функции, развернутые таким образом, обычно называются обработчиками).
- add
-
— необязательно, либо
''или'+'. Передача пустой строки означает, что это связывание должно заменить любые другие связывания, связанные с этим событием. Передача'+'означает, что эта функция должна быть добавлена в список функций, связанных с этим типом события.
Например:
def turn_red(self, event):
event.widget["activeforeground"] = "red"
self.button.bind("<Enter>", self.turn_red)
Обратите внимание, как в обработчике turn_red() используется поле widget события. Это поле содержит виджет, который получил X событие. В следующей таблице перечислены другие поля событий, к которым можно получить доступ, и как они обозначаются в Tk, что может быть полезно при работе со страницами справки Tk.
Tk | Tkinter Event Field | Tk | Tkinter Event Field |
|---|---|---|---|
%f | focus | %A | char |
%h | height | %E | send_event |
%k | keycode | %K | keysym |
%s | state | %N | keysym_num |
%t | time | %T | type |
%w | width | %W | widget |
%x | x | %X | x_root |
%y | y | %Y | y_root |
Параметр index
Ряд виджетов требуют передачи параметра «index». Он используется для указания на определённое место в виджете Text, определённых символов в виджете Entry или определённых пунктов меню в виджете Menu.
- Индексы виджета Entry (index, view index и т.д.)
-
В виджетах Entry есть опции, которые ссылаются на позиции символов в отображаемом тексте. Вы можете использовать эти
tkinterфункции для доступа к этим особым точкам в виджетах текста: - Индексы виджета Text
-
Индексация для виджетов Text очень богата и лучше всего описывается в справке Tk.
- Индексы меню (menu.invoke(), menu.entryconfig() и т.д.)
-
Некоторые опции и методы для меню манипулируют конкретными пунктами меню. В любой ситуации, когда нужен индекс меню для опции или параметра, можно передать:
- целое число, которое относится к числовой позиции элемента в виджете, считая сверху, начиная с 0;
- строку
"active", которая относится к позиции меню, которая в настоящее время находится под курсором; - строку
"last", которая относится к последнему элементу меню; - целое число, предваряемое
@, как в@6, где целое число интерпретируется как координата y в пикселях в системе координат меню; - строку
"none", которая обозначает отсутствие элемента меню, чаще всего используется с menu.activate() для деактивации всех элементов, и, наконец, - строку текста, которая сопоставляется с меткой элемента меню, начиная со сканирования сверху вниз. Обратите внимание, что этот тип индекса рассматривается после всех остальных, что означает, что совпадения для элементов меню с метками
last,active, илиnoneмогут быть интерпретированы как вышеупомянутые литералы, вместо этого.
Изображения
Изображения различных форматов могут быть созданы с помощью соответствующего подкласса tkinter.Image:
-
BitmapImageдля изображений в формате XBM. -
PhotoImageдля изображений в форматах PGM, PPM, GIF и PNG. Последний поддерживается начиная с Tk 8.6.
Любой тип изображения создаётся с помощью опции file или data (также доступны и другие опции).
Затем объект изображения может быть использован там, где поддерживается опция image для некоторых виджетов (например, метки, кнопки, меню). В этих случаях Tk не сохранит ссылку на изображение. Когда последний Python-ссылка на объект изображения удалена, данные изображения также удаляются, и Tk отобразит пустую область там, где было изображение.
См. также
Пакет Pillow добавляет поддержку таких форматов, как BMP, JPEG, TIFF и WebP, и других.
Обработчики файлов Tkinter
Tk позволяет регистрировать и отменять регистрацию функции обратного вызова, которая будет вызываться из Tk mainloop, когда для дескриптора файла доступен ввод-вывод. Только один обработчик может быть зарегистрирован на один дескриптор файла. Пример кода:
import tkinter widget = tkinter.Tk() mask = tkinter.READABLE | tkinter.WRITABLE widget.tk.createfilehandler(file, mask, callback) ... widget.tk.deletefilehandler(file)
Эта функция недоступна в Windows.
Поскольку вы не знаете, сколько байтов доступно для чтения, вы можете не захотеть использовать методы BufferedIOBase или TextIOBase read() или readline(), так как они будут настаивать на чтении определенного количества байтов. Для сокетов подойдут методы recv() или recvfrom(); для других файлов используйте чтение в сыром виде или %%%CODE_BLOCK_195%%.
-
Widget.tk.createfilehandler(file, mask, func) -
Регистрирует функцию обратного вызова обработчика файлов func. Аргумент file может быть объектом с методом
fileno()(таким как файл или сокет) или целочисленным дескриптором файла. Аргумент mask представляет собой логическое ИЛИ из любых из трёх констант ниже. Функция обратного вызова вызывается следующим образом:callback(file, mask)
-
Widget.tk.deletefilehandler(file) -
Отменяет регистрацию обработчика файла.
-
tkinter.READABLE -
tkinter.WRITABLE -
tkinter.EXCEPTION -
Константы, используемые в аргументе mask.
© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.7/library/tkinter.html