Spec-Zone.ru › Python 3.6

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

Онлайн-справочник по tkinter, поддерживаемый effbot.org.

Programming Python

Книга Марка Лаутца, содержит отличное описание Tkinter.

Modern Tkinter for Busy Python Developers

Книга Марка Роземана о создании привлекательных и современных графических интерфейсов пользователя с помощью Python и Tkinter.

Python и Tkinter программирование

Книга Джона Грейсона (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 и Tk Toolkit

Книга Джона Аустерхаута, изобретателя Tcl.

Практическое программирование на Tcl и Tk

Энциклопедическая книга Брента Уэлча.

25.1.1. Модули 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(), может иметь созданное окно верхнего уровня (и инициализированную Tk-подсистему) путём вызова метода loadtk().

Другие модули, предоставляющие поддержку Tk:

tkinter.scrolledtext

Виджет Text с встроенной вертикальной полосой прокрутки.

tkinter.colorchooser

Диалог для выбора цвета пользователем.

tkinter.commondialog

Базовый класс для диалогов, определённых в других модулях, перечисленных здесь.

tkinter.filedialog

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

tkinter.font

Утилиты для работы с шрифтами.

tkinter.messagebox

Доступ к стандартным диалоговым окнам Tk.

tkinter.simpledialog

Базовые диалоги и вспомогательные функции.

tkinter.dnd

Поддержка перетаскивания для tkinter. Это экспериментально и должно стать устаревшим, когда оно будет заменено DND Tk.

turtle

Графика черепахи в окне Tk.

25.1.2. Tkinter Life Preserver

Эта секция не предназначена для того, чтобы стать исчерпывающим учебным пособием ни по Tk, ни по Tkinter. Скорее, она предназначена как временная мера, предоставляя некоторое вводное ориентирование по системе.

Авторы:

  • Tk был написан Джоном Аустерхаутом, будучи в Беркли.
  • Tkinter был написан Стёном Люмхолтом и Гвидо ван Россумом.
  • Данный Life Preserver был написан Мэттом Конвеем в Университете Вирджинии.
  • Отображение HTML и некоторые исправления были получены из версии FrameMaker Кенном Манхаймером.
  • Фредрик Лундх дополнил и пересмотрел описания интерфейса классов, чтобы привести их в соответствие с Tk 4.2.
  • Майк Кларксон преобразовал документацию в LaTeX и скомпилировал главу по пользовательскому интерфейсу справочного руководства.

25.1.2.1. Как использовать этот раздел

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

При попытке ответить на вопросы типа «как сделать то-то и то-то», часто лучше всего выяснить, как сделать «то-то и то-то» непосредственно в Tk, а затем перевести это в соответствующий вызов tkinter. Программисты Python часто могут догадаться о правильной Python-команде, посмотрев документацию Tk. Это означает, что для использования Tkinter вам нужно будет немного знать о Tk. Этот документ не может выполнить эту роль, поэтому лучше всего указать лучшие существующие руководства. Вот несколько подсказок:

  • Авторы настоятельно рекомендуют получить копию страниц справки Tk. В частности, страницы справки в каталоге manN наиболее полезны. Страницы справки man3 описывают C-интерфейс к библиотеке Tk и, таким образом, не особенно полезны для сценаристов.
  • Издательство Addison-Wesley выпускает книгу «Tcl и Tk Toolkit» Джона Аустерхаута (ISBN 0-201-63337-X), которая является хорошим введением в Tcl и Tk для начинающих. Книга не является исчерпывающей, и во многих деталях ссылается на страницы справки.
  • tkinter/__init__.py — это крайняя мера для большинства, но может быть хорошим местом для обращения, когда ничего другое не имеет смысла.

25.1.2.2. Простая программа «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()

25.1.3. Краткий обзор 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 текстового поля ввода, требуют аргументов для указания диапазона текста, который нужно удалить.

25.1.4. Сопоставление базового 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()

Чтобы передать виджет в менеджер компоновки (packer), вызывайте pack с необязательными аргументами. В Tkinter класс Pack содержит всю эту функциональность, и различные формы команды pack реализуются как методы. Все виджеты в tkinter являются подклассами Packer и, следовательно, наследуют все методы компоновки. Смотрите документацию модуля tkinter.tix для дополнительной информации о менеджере компоновки Form.

pack .fred -side left       =====>  fred.pack(side="left")

25.1.5. Взаимосвязь 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 для рисования графики на экране.

25.1.6. Полезная справка

25.1.6.1. Установка опций

Опции управляют такими вещами, как цвет и ширина рамки виджета. Опции можно задать тремя способами:

При создании объекта, используя именованные аргументы
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

имя опции

'relief'

1

имя опции для поиска в базе данных

'relief'

2

класс опции для поиска в базе данных

'Relief'

3

значение по умолчанию

'raised'

4

текущее значение

'groove'

Пример:

>>> print(fred.config())
{'relief': ('relief', 'relief', 'Relief', 'raised', 'groove')}

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

25.1.6.2. Менеджер компоновки (Packer)

Менеджер компоновки packer — один из механизмов управления геометрией Tk. Менеджеры геометрии используются для задания относительного расположения виджетов внутри их контейнера — их общего владельца. В отличие от более громоздкого placer (который используется реже и не рассматривается здесь), packer принимает указания на качественные отношения — над, слева от, заполняющий и т. д. — и вычисляет точные координаты размещения для вас.

Размер любого виджета-владельца определяется размером «подчиненных виджетов» внутри него. Packer используется для управления тем, где появляются подчиненные виджеты внутри владельца, в который они упакованы. Вы можете упаковывать виджеты в фреймы, а фреймы — в другие фреймы, чтобы получить желаемую компоновку. Кроме того, расположение динамически корректируется для учета увеличения конфигурации после упаковки.

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

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

fred.pack()                     # defaults to side = "top"
fred.pack(side="left")
fred.pack(expand=1)

25.1.6.3. Опции менеджера компоновки (Packer)

Для более подробной информации о менеджере компоновки packer и опциях, которые он может принимать, обратитесь к страницам руководства и странице 183 книги Джона Аустерхаута.

anchor

Тип якоря. Обозначает, куда укладчик должен поместить каждый подчиненный элемент в свой пакет.

expand

Булево значение, 0 или 1.

fill

Допустимые значения: 'x', 'y', 'both', 'none'.

ipadx и ipady

Расстояние — обозначение внутреннего отступа с каждой стороны виджета-подчинённого элемента.

padx и pady

Расстояние — обозначение внешнего отступа с каждой стороны виджета-подчинённого элемента.

side

Допустимые значения: 'left', 'right', 'top', 'bottom'.

25.1.6.4. Переменные виджетов связи

Текущее значение некоторых виджетов (например, текстовых полей ввода) может быть напрямую связано с переменными приложения с помощью специальных опций. Эти опции — 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())

25.1.6.5. Диспетчер окон

В 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()

25.1.6.6. Типы данных опций 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() некоторого виджета полосы прокрутки, но может быть любым методом виджета, принимающим один аргумент.

wrap:

Должно быть одним из: "none", "char", или "word".

25.1.6.7. Связывания и события

Метод bind из команд виджетов позволяет наблюдать за определёнными событиями и вызывать функцию обратного вызова, когда возникает событие указанного типа. Формат метода bind:

def bind(self, sequence, func, add=''):

где:

sequence

является строкой, обозначающей целевой тип события. (См. страницу справки bind и страницу 201 книги Джона Оустерхаута для получения подробностей).

func

является функцией Python, принимающей один аргумент, которая вызывается при возникновении события. Экземпляр Event будет передан в качестве аргумента. (Функции, развернутые таким образом, обычно называются обработчиками.)

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

25.1.6.8. Параметр индекса

Несколько виджетов требуют параметра «индекс», передаваемого в них. Они используются для указания конкретного места в виджете Text, или конкретных символов в виджете Entry, или конкретных пунктов меню в виджете Menu.

Индексы виджетов ввода (индекс, индекс отображения и т. д.)

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

Индексы виджетов текста

Нотация индексов для виджетов текста очень богата и лучше всего описана в страницах справки Tk.

Индексы меню (menu.invoke(), menu.entryconfig() и т. д.)

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

  • целое число, которое ссылается на числовую позицию пункта в виджете, считая сверху, начиная с 0;
  • строку "active", которая ссылается на позицию меню, которая в данный момент находится под курсором;
  • строку "last", которая ссылается на последний пункт меню;
  • целое число, предваряемое @, как в @6, где целое число интерпретируется как координата y в пикселях в системе координат меню;
  • строку "none", которая обозначает отсутствие пункта меню, чаще всего используется с menu.activate() для деактивации всех пунктов, и, наконец,
  • строку текста, которая сопоставляется с меткой пункта меню по образцу, просматривая сверху вниз. Обратите внимание, что этот тип индекса рассматривается после всех других, что означает, что соответствия для пунктов меню с метками last, active, или none могут быть интерпретированы как указанные выше литералы вместо этого.

25.1.6.9. Изображения

Изображения различных форматов могут быть созданы с помощью соответствующего подкласса tkinter.Image:

  • BitmapImage для изображений в формате XBM.
  • PhotoImage для изображений в форматах PGM, PPM, GIF и PNG. Последний поддерживается начиная с Tk 8.6.

Любой тип изображения создаётся с помощью параметра file или data (также доступны другие параметры).

Объект изображения затем может использоваться там, где параметр image поддерживается каким-либо виджетом (например, метками, кнопками, меню). В этих случаях Tk не будет сохранять ссылку на изображение. Когда удаляется последняя ссылка Python на объект изображения, данные изображения также удаляются, и Tk будет отображать пустой прямоугольник там, где использовалось изображение.

См. также

Пакет Pillow добавляет поддержку форматов, таких как BMP, JPEG, TIFF и WebP, среди прочих.

25.1.7. Обработчики файлов

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

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)

Отменяет регистрацию обработчика файла.

tkinter.READABLE
tkinter.WRITABLE
tkinter.EXCEPTION

Константы, используемые в аргументах mask.

© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.6/library/tkinter.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API