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
- Руководство темы Python Tkinter предоставляет большую информацию об использовании Tk от Python и ссылок с другими источниками информации о Tk.
- TKDocs
- Обширное учебное пособие и более удобные страницы виджетов для некоторых виджетов.
- Справочник по Tkinter 8.5: графический интерфейс для Python
- Он-лайн справочный материал.
- Tkinter документы от effbot
- Интерактивная ссылка на tkinter, поддерживаемая effbot.org.
- Программирование Python
- Книга марка лутца, имеет отличное освещение ткинтера.
- Современный Tkinter для занятых разработчиков Python
- Книга марка роузмана о построении привлекательных и современных графических пользовательских интерфейсов с Python и Tkinter.
- Программирование на Python и Tkinter
- Книга Джона Грейсона (ISBN 1-884777-81-3).
Tcl/Tk документация:
- Тк команды
- Большинство команд доступны как классы
tkinter
илиtkinter.ttk
. Измените „8.6“ на версию установки Tcl/Tk. - Tcl/Tk последние страницы руководства
- Последние руководства Tcl/Tk по www.tcl.tk.
- Домашняя страница ActiveState Tcl
- Разработка Tk/Tcl в основном происходит в ActiveState.
- Tcl и инструментарий Tk
- Книга джона оустерхаута, изобретателя Tcl.
- Практическое программирование на Tcl и 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 был написан Джоном Оустерхаутом (John Ousterhout) во время пребывания в Беркли.
- Tkinter был написан Стином Люмхолтом (Steen Lumholt) и Гидо ван Россумом (Guido van Rossum).
- Этот Спасательный круг был написан Мэттом Конуэем (Matt Conway) в университете Вирджинии.
- Рендеринг HTML и некоторые либеральные изменения были произведены из версии FrameMaker Кеном Манхаймером (Ken Manheimer).
- Фредрик Лундх (Fredrik Lundh) разработал и пересмотрел описания интерфейсов классов, чтобы получить их в актуальном виде с Tk 4.2.
- Майк Кларксон (Mike Clarkson) преобразовал документацию в LaTeX и составил главу «Пользовательский интерфейс» справочного руководства.
Как использовать этот раздел¶
Этот раздел состоит из двух частей: первая половина (грубо) охватывает материал фона, в то время как вторая половина может быть взята за клавиатуру в качестве удобного эталона.
При попытке ответить на вопросы формы «как мне делать бла», часто лучше всего
узнать, как делать «бла» в прямом Tk, а затем преобразовать это обратно в
соответствующий tkinter
звонок. Python программисты часто могут угадать
правильную команду Python, просматривая документацию Tk. Это означает, что
для того, чтобы использовать Tkinter, вам придется знать немного о Tk. Этот
документ не может выполнять эту роль, поэтому лучшее, что мы можем сделать, это
указать на лучшую существующую документацию. Вот некоторые намеки:
- Авторы настоятельно предлагают получить копию страниц Tk man. В частности,
наиболее полезны мужские страницы в каталоге
manN
. Страницыman3
man описывают интерфейс C с библиотекой Tk и поэтому не особенно полезны для составителей сценариев. - Addison-Wesley публикует книгу под названием «Tcl and the Tk Toolkit» Джона Оустерхаута (ISBN 0-201-63337-X), которая является хорошим введением в Tcl и Tk для новичка. Книга не является исчерпывающей, и по многим деталям она откладывает на ман страницы.
tkinter/__init__.py
является последним средством для большинства, но может быть хорошим местом, чтобы пойти, когда больше нет смысла.
Простая программа Hello World¶
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 - это только его class, options, которые помогают его настроить, и actions, которые заставляют его делать полезные вещи.
Чтобы создать виджет в Tk, команда всегда имеет форму:
classCommand newPathname options
- classCommand
- обозначает, какой вид виджета создать (кнопка, метка, меню…)
- newPathname
- новое имя этого виджета. Все имена в Tk должны быть уникальными.
Чтобы обеспечить это, виджеты в Tk именуются с помощью pathnames, как и файлы
в файловой системе. Виджет верхнего уровня, root, называется
.
(точка), а потомки разделяются несколькими точками. Например,.myApp.controlPanel.okButton
может быть именем виджета. - options
- настроить внешний вид виджета, а в некоторых случаях и его поведение. Варианты поставляются в виде списка флагов и значения. Флагам предшествует „-„, как и командным флагам оболочки Unix, и значения помещаются в кавычки, если они больше одного слова.
Например:
button .fred -fg red -text "hi there"
^ ^ \______________________/
| | |
class new options
command widget (-opt val -opt val ...)
После создания путь к виджету становится новой командой. Этот новый widget command является дескриптором программиста для получения нового виджета для выполнения некоторых action. В 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 параметры задаются как ключевые-аргументы в конструкторе сущность и ключевый аргументы для настройки вызовов или как индексы сущность в стиле словаря для установленных сущности. См. раздел Опции настройки о настройке параметров.:
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()
Для предоставления виджета пакеру (менеджеру геометрии) вызывается пакет с
необязательными аргументами. В Tkinter класс Pack содержит всю эту
функциональность, и различные формы команды pack реализуются как методы. Все
виджеты в tkinter
являются подклассами от Packer и поэтому наследуют все
методы упаковки. Дополнительные сведения о диспетчере геометрии формы см. в
документации по модулю tkinter.tix
:
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 man для рассматриваемого виджета.
Обратите внимание, что на справочных страницах перечислены «STANDARD OPTIONS» и «WIDGET SPECIFIC OPTIONS» для каждого виджета. Первый является списком параметров, которые являются общими для многих виджетов, второй является опциями, которые являются идиосинкратичными для этого конкретного виджета. Стандартные параметры задокументированы на странице options(3).
В этом документе не проводится никакого различия между стандартными параметрами
и параметрами виджетов. Некоторые параметры не применяются к некоторым видам
виджетов. Ответ данного виджета на конкретный параметр зависит от класса
виджета; кнопки имеют опцию command
, метки - нет.
Параметры, поддерживаемые данным виджетом, перечислены на справочной странице
этого виджета или могут быть запрошены во время выполнения путем вызова метода
config()
без аргументов или вызова метода keys()
для этого виджета.
возвращает значение этих вызовов - словарь, ключом которого является название
опции как строка (например, 'relief'
) и значения которого являются
5-кортежами.
Некоторые варианты, как и bg
являются синонимами для общих вариантов с
длинными именами (bg
является кратким для «background»). При передаче метода
config()
имя сокращенного варианта будет возвращает 2-кортежу, а не
5-кортежу. Переданный обратно 2-кортеж будет содержать название синонима и
«реальный» вариант (например, ('bg', 'background')
).
Индекс | Значение | Пример |
---|---|---|
0 | название опции | 'relief' |
1 | имя опции для поиска в базе данных | 'relief' |
2 | класс параметров для поиска в базе данных | 'Relief' |
3 | значение по умолчанию | 'raised' |
4 | текущее значение | 'groove' |
Пример:
>>> print(fred.config())
{'relief': ('relief', 'relief', 'Relief', 'raised', 'groove')}
Конечно, напечатанный словарь будет включать все доступные варианты и их значения. Это подразумевается только в качестве примера.
Пакер¶
Пакер — один из механизмов управления геометрией Tk. Диспетчеры геометрии используются для указания относительного позиционирования виджетов внутри их контейнера — общего для них master. В отличие от более громоздкого placer (который используется реже и мы здесь не рассматриваем), пакер принимает качественные характеристики взаимосвязи: выше, слева от, заполнение и т. д. - и прорабатывает все, чтобы определить точные координаты размещения для вас.
Размер любого виджета master определяется размером «подчиненных виджетов» внутри. Пакер используется для управления местом появления подчиненных виджетов внутри главного, в которое они упакованы. Вы можете упаковать виджеты в фреймы, а фреймы в другие фреймы, чтобы получить желаемый вид макета. Кроме того, компоновка динамически регулируется для внесения дополнительных изменений в конфигурацию после ее упаковки.
Обратите внимание, что виджеты не отображаются до тех пор, пока их геометрия не
будет задана менеджером геометрии. Это распространенная ранняя ошибка, чтобы
исключить спецификацию геометрии, а затем удивиться, когда виджет создан, но
ничего не появляется. Виджет появится только после применения, например, метода
pack()
упаковщика.
Метод pack() можно вызвать с ключевой-опцией/значение парами, которые управляют отображением виджета в контейнере и его поведением при изменении размера главного окна приложения. Вот несколько примеров:
fred.pack() # по умолчанию в side="top"
fred.pack(side="left")
fred.pack(expand=1)
Опции пакера¶
Для получения более подробной информации о упаковщике и опциях, которые он может использовать, см. справочные страницы и страницу 183 книги Джона Оустерхаута (John Ousterhout’s).
- 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
.
Уже определено много полезных подклассы переменной: StringVar
, IntVar
,
DoubleVar
и BooleanVar
. Для считывания текущего значение такой переменной
вызовите на ней метод get()
, а для изменения его значение вызовите метод
set()
. Если вы следуете этому протоколу, виджет всегда будет отслеживать
значение переменной, без дальнейшего вмешательства с вашей стороны.
Например:
import tkinter as tk
class App(tk.Frame):
def __init__(self, master):
super().__init__(master)
self.pack()
self.entrythingy = tk.Entry()
self.entrythingy.pack()
# Создать переменную приложения.
self.contents = tk.StringVar()
# Установить для него какое-нибудь значение.
self.contents.set("this is a variable")
# Сказать виджету ввода, чтобы он следил за этой переменной.
self.entrythingy["textvariable"] = self.contents
# Определить обратный вызов, когда пользователь нажимает return.
# Он печатает текущее значение переменной.
self.entrythingy.bind('<Key-Return>',
self.print_contents)
def print_contents(self, event):
print("Hi. The current entry content is:",
self.contents.get())
root = tk.Tk()
myapp = App(root)
myapp.mainloop()
Диспетчер окон¶
В Tk имеется служебная команда wm
для взаимодействия с оконным
менеджером. Параметры команды wm
позволяют управлять такими элементами,
как заголовки, размещение, растровые изображения значков и т.п. В tkinter
эти
команды были реализованы как методы в классе Wm
. Виджеты Toplevel
относятся к подклассу класса Wm
и поэтому могут вызывать методы
Wm
напрямую.
Чтобы попасть в окно верхнего уровня, содержащее данный виджет, часто можно
просто обратиться к хозяину виджета. Конечно, если виджет был упакован внутри
фрейм, мастер не будет представлять окно верхнего уровня. Чтобы открыть
окно верхнего уровня, содержащее произвольный виджет, можно вызвать метод
_root()
. Этот метод начинается с подчеркивания для обозначения того факта,
что эта функция является частью реализации, а не интерфейсом функциональности
Tk.
Вот несколько примеров типичного использования:
import tkinter as tk
class App(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.pack()
# создать приложение
myapp = App()
#
# вот вызовы метода для класса диспетчера окон
#
myapp.master.title("My Do-Nothing Application")
myapp.master.maxsize(1000, 400)
# запустить программу
myapp.mainloop()
Типы данных опций Tk¶
- anchor
- Допустимые значения являются точки компаса:
"n"
,"ne"
,"e"
,"se"
,"s"
,"sw"
,"w"
,"nw"
,, а также"center"
. - bitmap
- Восемь встроенных, именованных битовых массивов:
'error'
,'gray25'
,'gray50'
,'hourglass'
,'info'
,'questhead'
,'question'
,'warning'
. Чтобы указать X растровое имя файла, укажите полный путь к файлу, которому предшествует@
, как в"@/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"
. Можно также указать собственный файл растрового изображения и маски. Смотрите страницу 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()
какого-либо виджета scrollbar, но может быть любым методом виджета, который принимает один аргумент. - wrap:
- Должно быть одним из:
"none"
,"char"
или"word"
.
Привязки и события¶
Метод bind из команды виджета позволяет отслеживать определенные события и иметь триггер функции колбэка при возникновении этого типа событий. Форма метода привязывания
def bind(self, sequence, func, add=''):
где:
- sequence
- представляет собой строку, которая обозначает целевой вид события. (Для получения более подробной информации см. страницу bind man и страницу 201 книги John Ousterhout).
- func
- функция Python, принимающая один аргумент и вызываемая при возникновении события. В качестве аргумента будет передан сущность события. (Функции, развернутые таким образом, обычно известны как callbacks.)
- add
- является необязательным, либо
''
, либо'+'
. Передача пустого строка означает, что этот биндинг должен заменить любые другие привязки, с которыми связано это событие. Передача'+'
означает, что эта функция должна быть добавлена в список функций, связанных с данным типом события.
Например:
def turn_red(self, event):
event.widget["activeforeground"] = "red"
self.button.bind("<Enter>", self.turn_red)
Обратите внимание на доступ к полю виджета события в turn_red()
колбэк. Это
поле содержит виджет, уловивший событие X. В следующей таблице перечислены
другие поля событий, к которым можно получить доступ, и то, как они обозначаются
в Tk, что может быть полезно при обращении к страницам Tk man.
Tk | Tkinter поле события | Tk | Tkinter поле события |
---|---|---|---|
%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». Они используемый указывать на определенное место в виджете «Текст», на определенные символы в виджете «Ввод» или на определенные пункты меню в виджете «Меню».
- Индексы виджетов ввода (индекс, индекс вида и т.д.)
- Виджеты ввода имеют
параметры, относящиеся к символ позициям в отображаемом тексте. Для доступа
к этим специальным точкам в текстовых виджетах можно использовать следующие
функции
tkinter
: - Индексы текстовых виджетов
- Представление индекса для текстовых виджетов очень богато и лучше всего описано на страницах Tk man.
- Индексы меню (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.
Обработчики файлов¶
Tk позволяет зарегистрировать и отменить регистрацию функцию колбэка, которая будет вызвана из основного цикла Tk, когда I/O возможно файловый дескриптор. На обработчик файла может быть зарегистрирован только один дескриптор. Пример код:
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()
методы будут
работать нормально; для других файлов используйте необработанные чтения или
os.read(file.fileno(), maxbytecount)
.
-
Widget.tk.
createfilehandler
(file, mask, func)¶ Регистрирация функцию файлового обработчика колбэка func. Аргументом file может быть либо объектом с методом
fileno()
(например, файл или объект сокета), либо целочисленный дескриптор файла. Аргумент mask представляет собой комбинацию ИЛИ любой из трех приведенных ниже констант. Колбэк вызывается следующим образом:callback(file, mask)
-
Widget.tk.
deletefilehandler
(file)¶ Отменяет регистрацию файлового обработчика.