Виджеты Button, Label, Entry
В этом уроке рассмотрим подробнее три наиболее простых и популярных виджета GUI – кнопку, метку и однострочное текстовое поле. В tkinter объекты этих элементов интерфейса порождаются соответственно от классов Button , Label и Entry .
Свойства и методы виджетов бывают относительно общими, характерными для многих типов, а также частными, зачастую встречающимися только у какого-то одного класса. В любом случае список настраиваемых свойств велик. В этом курсе мы будем рассматривать только ключевые свойства и методы классов пакета tkinter .
В Tkinter существует три способа конфигурирования свойств виджетов:
- в момент создания объекта,
- с помощью метода config , он же configure ,
- путем обращения к свойству как к элементу словаря.
Button – кнопка
Самыми важными свойствами виджета класса Button являются text , с помощью которого устанавливается надпись на кнопке, и command для установки действия, то есть того, что будет происходить при нажатии на кнопку.
По умолчанию размер кнопки соответствует ширине и высоте текста, однако с помощью свойств width и height эти параметры можно изменить. Единицами измерения в данном случае являются знакоместа.
Такие свойства как bg , fg , activebackground и activeforeground определяют соответственно цвет фона и текста, цвет фона и текста во время нажатия и установки курсора мыши над кнопкой.
Здесь свойство command устанавливается с помощью метода config . Однако можно было сделать и так: b1[‘command’] = change . Вот так будет выглядеть кнопка после запуска программы и после нажатия на нее:
Label – метка
Виджет Label просто отображает текст в окне и служит в основном для информационных целей (вывод сообщений, подпись других элементов интерфейса). Свойства метки во многом схожи с таковыми у кнопки. Однако у меток нет опции command . Поэтому связать их с событием можно только с помощью метода bind .
На примере объекта типа Label рассмотрим свойство font – шрифт.
Значение шрифта можно передать как строку или как кортеж. Второй вариант удобен, если имя шрифта состоит из двух и более слов. После названия шрифта можно указать размер и стиль.
Также как font свойство bd есть не только у метки. С его помощью регулируется размер границ (единица измерения – пиксель):
Бывает, что метки и кнопки не присваивают переменным, если потом к ним в коде не приходится обращаться. Их создают от класса и сразу размещают:
В данном примере только у одной метки есть связь с переменной, так как одно из ее свойств может быть изменено в процессе выполнения программы.
Entry – однострочное текстовое поле
Текстовые поля предназначены для ввода информации пользователем. Однако нередко также для вывода, если предполагается, что текст из них будет скопирован. Текстовые поля как элементы графического интерфейса бывают однострочными и многострочными. В tkinter вторым соответствует класс Text , который будет рассмотрен позже.
Свойства экземпляров Entry во многом схожи с двумя предыдущими виджетами. А вот методы – нет. Из текстового поля можно взять текст. За это действие отвечает метод get . В текстовое поле можно вставить текст методом insert . Также можно удалить текст методом delete .
Метод insert принимает позицию, в которую надо вставлять текст, и сам текст.
приведет к тому, что после каждого нажатия на кнопку будет вставляться новое время пред уже существующей в поле строкой.
Если 0 в insert заменить на константу END , то вставляться будет в конец. Можно указать любое число-индекс знакоместа, тогда вставка будет производиться куда-либо в середину строки.
Метод delete принимает один или два аргумента. В первом случае удаляется один символ в указанной позиции. Во втором – срез между двумя указанными индексами, не включая последний. Если нужно полностью очистить поле, то первым аргументом должен быть 0, вторым – END .
Практическая работа
Напишите программу, состоящую из семи кнопок, цвета которых соответствуют цветам радуги. При нажатии на ту или иную кнопку в текстовое поле должен вставляться код цвета, а в метку – название цвета.
Коды цветов в шестнадцатеричной кодировке: #ff0000 – красный, #ff7d00 – оранжевый, #ffff00 – желтый, #00ff00 – зеленый, #007dff – голубой, #0000ff – синий, #7d00ff – фиолетовый.
Примерно должно получиться так:
Для выравнивания строки по центру в текстовом поле используется свойство justify со значением CENTER .
Курс с примерами решений практических работ: android-приложение, pdf-версия.
GUI Help/Tkinter book
Tkinter — библиотека для создания GUI-приложений на Python.
Содержание
Общий шаблон программ [ править ]
Все программы, написанные на Tkinter, должны иметь подобный шаблону вид:
Основные классы [ править ]
Модуль tkinter включает следующие классы:
- Button (кнопка)
- Radiobutton (радио-кнопка)
- Checkbutton (флажок)
- Entry (однострочное поле для ввода)
- Text (многострочное поле для ввода)
- Label (метка)
- Scale (ползунок)
- Scrollbar (полоса прокрутки)
- Frame (виджет для группировки других виджетов)
- LabelFrame (аналог Frame, только с заголовком)
- Listbox (список)
- Canvas (поле для рисования)
- PanedWindow (элемент разделения окна)
- Menu (главное меню)
- Tk (главное единственное окно)
- Toplevel (дочернее окно)
Классы [ править ]
Ниже приведена схема, иллюстрирующая в какой части виджета работают какие свойства.
PhotoImage [ править ]
PhotoImage — класс цветной картинки. Синтаксис создания изображения:
name — имя картинки (не имя файла загружаемого изображения), p — полный путь к изображению.
Button [ править ]
Button — класс обычной кнопки. Общий синтаксис создания кнопки:
name — имя кнопки, window — имя окна, на котором она располагается.
- Изначально равна такому количеству пикселей, чтобы текст помещался в кнопке вплотную к ее границам.
- Изначально равна такому количеству пикселей, чтобы текст помещался в кнопке вплотную к ее границам.
- Изначально текст будет отображаться по центру кнопки.
- Возможно сделать многострочный текст, используя \n.
- Фон, который будет иметь кнопка в то время, когда на нее не нажали.
- Цвет текста, который будет иметь кнопка в то время, когда на нее не нажали.
- Ширина границы кнопки, которая будет у ее границы пока на нее не нажали.
- NORMAL — обычное состояние кнопки, при котором она может нажиматься и взаимодействовать с пользователем.
- DISABLED — такое состояние кнопки, при котором она не может взаимодействовать с пользователем.
- Изначально картинка на кнопке будет отображаться вместо текста, но это можно изменить, изменяя значения свойства compound.
- BOTTOM — картинка будет отображаться под текстом.
- LEFT — картинка будет отображаться слева от текста.
- RIGHT — картинка будет отображаться справа от текста.
- TOP — картинка будет отображаться над текстом.
- Изначально текст будет отображаться с выравниванием по левому краю, но это можно изменить, используя свойство justify.
- CENTER — текст выравнивается на кнопке по центру.
- LEFT — текст выравнивается на кнопке по левому краю.
- RIGHT — текст выравнивается на кнопке по правому краю.
Свойство должно иметь значит вида: «Имя_шрифта размер».
Изменить свойство у кнопки или любого другого виджета можно так:
Обратите внимание, что везде все цвета пишутся в кавычках.
Radiobutton [ править ]
Radiobutton — класс радио — кнопки. Общий синтаксис создания кнопки:
name — имя радио-кнопки, window — имя окна, на котором она располагается.
| Свойство | Значение |
|---|---|
| width | Ширина радио-кнопки. |
| height | Высота радио-кнопки. |
| text | Текст на радио-кнопке. |
| bg | Фон радио-кнопки. |
| fg | Цвет текста. |
| bd | Ширина границы радио-кнопки. |
| activebackground | Цвет фона (когда радио-кнопка нажата). |
| activeforeground | Цвет текста (когда радио-кнопка нажата). |
| disabledbackground | Цвет фона (когда свойство state == DISABLED). |
| disabledforeground | Цвет текста (когда свойство state == DISABLED). |
| state | Состояние радио-кнопки (NORMAL, DISABLED). |
| compound | Расположение картинки на радио-кнопке (CENTER, BOTTOM, LEFT, RIGHT, TOP). |
| justify | Выравнивание текста. |
| relief | Рельеф радио-кнопки (FLAT, GROOVE, RIDGE, SUNKEN, RAISE). |
| overrelief | Рельеф радио-кнопки когда над ней находится курсор (FLAT, GROOVE, RIDGE, SUNKEN, RAISE). |
| image | Имя картинки, отображаемой на радио-кнопке. |
| selectimage | Имя картинки, отображаемой на радио-кнопке (когда она выбрана). |
| font | Вид шрифта на радио-кнопке. |
| indicatoron | Стиль отображения радио-кнопки (если true, то будет показываться кружок рядом с радио-кнопкой, иначе нет). |
| value | Значение, которое будет присваиваться переменной, указанной в параметре variable при выборе радио-кнопки. |
| variable | Имя переменной, у которой будет изменятся значение на указанное в свойстве value при выборе радио-кнопки. |
Выбрать одну радио-кнопку можно только среди группы (радио-кнопок у которых значение параметра variable равны).
Checkbutton [ править ]
Checkbutton — класс кнопки-флажка (флажка). Общий синтаксис создания кнопки:
name — имя кнопки-флажка, window — имя окна, на котором он располагается.
| Свойство | Значение |
|---|---|
| width | Ширина флажка. |
| height | Высота флажка. |
| text | Текст около флажка. |
| bg | Фон флажка. |
| fg | Цвет флажка.. |
| bd | Ширина границы флажка. |
| activebackground | Цвет фона (когда флажок нажат). |
| activeforeground | Цвет текста (когда флажок нажат). |
| disabledbackground | Цвет фона (когда свойство state == DISABLED). |
| disabledforeground | Цвет текста (когда свойство state == DISABLED). |
| state | Состояние флажка (NORMAL, DISABLED). |
| compound | Расположение картинки на флажке (CENTER, BOTTOM, LEFT, RIGHT, TOP). |
| justify | Выравнивание текста. |
| relief | Рельеф флажка (FLAT, GROOVE, RIDGE, SUNKEN, RAISE). |
| overrelief | Рельеф флажка когда над ним находится курсор (FLAT, GROOVE, RIDGE, SUNKEN, RAISE). |
| image | Имя картинки, отображаемой на кнопке-флажке. |
| selectimage | Имя картинки, отображаемой на кнопке-флажке (когда он выбран). |
| font | Вид шрифта на кнопке-флажке. |
| indicatoron | Стиль отображения флажка (если true, то будет показываться кружок рядом с ф, иначе нет). |
| onvalue | Значение, которое будет присваиваться переменной, указанной в параметре variable при выборе кнопки-флажка. |
| offvalue | Значение, которое будет присваиваться переменной, указанной в параметре variable при выборе другой (не данной) кнопки-флажка. |
| variable | Имя переменной, у которой будет изменятся значение на указанное в свойстве value при выборе кнопки-флажка. |
Entry [ править ]
Entry — класс однострочного текстового поля. Общий синтаксис создания однострочного текстового поля:
name — имя однострочного текстового поля, window — имя окна, на котором оно располагается.
| Свойство | Значение |
|---|---|
| width | Ширина поля. |
| bg | Фон поля. |
| fg | Цвет поля. |
| bd | Ширина границы поля. |
| activebackground | Цвет фона (когда в поле набирают текст). |
| activeforeground | Цвет текста (когда в поле набирают текст). |
| disabledbackground | Цвет фона (когда свойство state == DISABLED). |
| disabledforeground | Цвет текста (когда свойство state == DISABLED). |
| state | Состояние поля (NORMAL, DISABLED). |
| justify | Выравнивание текста. |
| highlightcolor | Цвет второй границы (когда поле имеет фокус). |
| highlightbackground | Цвет второй границы (когда поле не имеет фокус). |
| highlightthickness | Ширина второй границы. |
| relief | Рельеф текстового поля (FLAT, GROOVE, RIDGE, SUNKEN, RAISE). |
| overrelief | Рельеф текстового поля когда над ним находится курсор (FLAT, GROOVE, RIDGE, SUNKEN, RAISE). |
| font | Вид шрифта в однострочном текстовом поле. |
| textvariable | Имя переменной, в которой хранится весь текст, находящийся в поле. |
| selectbackground | Цвет фона выделенного фрагмента текста. |
| selectforeground | Цвет текста выделенного фрагмента текста. |
| insertontime | Время, которое курсор виден. |
| insertofftime | Время, которое курсор не видим. |
Ниже a — имя текстового поля.
| Функция | Значение |
|---|---|
| a. get(начало,конец) | Получает фрагмент текста от символа, позиция которого определяется первым параметром, до символа, позиция которого определена вторым параметром. |
| a. insert(позиция,текст) | Вставляет текст в поле перед символом, индекс которого указан в качестве параметра позиции. (Нумерация идет с 0.) |
| a. delete(начало,конец) | Удаляет текст от символа, позиция которого определяется первым параметром, до символа, позиция которого определена вторым параметром. |
Text [ править ]
Text — класс многострочного текстогого поля. Общий синтаксис создания многострочного текстового поля:
name — имя многострочного текстового поля, window — имя окна, на котором оно располагается.
| Свойство | Значение |
|---|---|
| width | Ширина поля. |
| height | Высота поля. |
| bg | Фон поля. |
| fg | Цвет поля. |
| bd | Ширина границы поля. |
| activebackground | Цвет фона (когда в поле набирают текст). |
| activeforeground | Цвет текста (когда в поле набирают текст). |
| disabledbackground | Цвет фона (когда свойство state == DISABLED). |
| disabledforeground | Цвет текста (когда свойство state == DISABLED). |
| state | Состояние поля (NORMAL, DISABLED). |
| justify | Выравнивание текста. |
| highlightcolor | Цвет второй границы (когда поле имеет фокус). |
| highlightbackground | Цвет второй границы (когда поле не имеет фокус). |
| highlightthickness | Ширина второй границы. |
| relief | Рельеф текстового поля (FLAT, GROOVE, RIDGE, SUNKEN, RAISE). |
| overrelief | Рельеф текстового поля когда над ним находится курсор (FLAT, GROOVE, RIDGE, SUNKEN, RAISE). |
| font | Вид шрифта в многострочном текстовом поле. |
| selectbackground | Цвет фона выделенного фрагмента текста. |
| selectforeground | Цвет текста выделенного фрагмента текста. |
| insertontime | Время, которое курсор виден. |
| insertofftime | Время, которое курсор не видим. |
Ниже a — имя текстового поля.
- Позиция при указании должна иметь значение вида «%d.%d» % (x,y)
- Либо она может описываться одним и слов: CURRENT (текущая позиция курсора), END (позиция последнего символа в поле).
- Позиция при указании должна иметь значение вида «%d.%d» % (x,y)
- Либо она может описываться одним и слов: CURRENT (текущая позиция курсора), END (позиция последнего символа в поле).
- Позиция при указании должна иметь значение вида «%d.%d» % (x,y)
- Либо она может описываться одним и слов: CURRENT (текущая позиция курсора), END (позиция последнего символа в поле).
- Начало или конец должны иметь при указании значение вида «%d.%d» % (x,y)
- Либо она может описываться одним и слов: CURRENT (текущая позиция курсора), END (позиция последнего символа в поле).
- background — фон текста
- foreground — цвет текста
Label [ править ]
Label — класс метки. Общий синтаксис создания метки:
name — имя метки, window — имя окна, на котором она располагается.
| Свойство | Значение |
|---|---|
| width | Ширина метки. |
| height | Высота метки. |
| text | Текст на метке. |
| bg | Фон метки. |
| fg | Цвет текста. |
| bd | Ширина границы метки. |
| activebackground | Цвет фона (когда метка нажата). |
| activeforeground | Цвет текста (когда метка нажата). |
| disabledbackground | Цвет фона (когда свойство state == DISABLED). |
| disabledforeground | Цвет текста (когда свойство state == DISABLED). |
| state | Состояние метки (NORMAL, DISABLED). |
| compound | Расположение картинки на метке (CENTER, BOTTOM, LEFT, RIGHT, TOP). |
| justify | Выравнивание текста. |
| relief | Рельеф метки (FLAT, GROOVE, RIDGE, SUNKEN, RAISE). |
| overrelief | Рельеф метки когда над ней находится курсор (FLAT, GROOVE, RIDGE, SUNKEN, RAISE). |
| image | Имя картинки, отображаемой на метке. |
| font | Вид шрифта на метке. |
| textvariable | Имя переменной, в которой будет хранится текст на метке. |
Scale [ править ]
Scale — класс ползунка. Общий синтаксис создания ползунка:
name — имя ползунка, window — имя окна, на котором он располагается.
- HORIZONTAL — горизонтально
- VERTICAL — вертикально
Scrollbar [ править ]
Scrollbar — класс полосы прокрутки. Общий синтаксис создания полосы прокрутки:
name — имя полосы прокрутки, window — имя окна, на котором она располагается.
- Доступны только такие значения:
- виджет.xview — виджет будет прокручиваться горизонтально
- виджет.yview — виджет будет прокручиваться вертикально
a.configure( n scrollcommand=s.set)
n — либо x, либо y. Где a — прокручиваемый виджет, s — имя полосы прокрутки.
Frame [ править ]
Frame — класс фрейма. Общий синтаксис его создания:
name — имя фрейма, window — имя окна, на котором он располагается.
Свойство Значение width Ширина фрейма. height Высота фрейма. bg Фон фрейма. activebackground Цвет фона (когда полосу прокрутки двигают). disabledbackground Цвет фона (когда свойство state == DISABLED). state Состояние фрейма (NORMAL, DISABLED). relief Рельеф границы фрейма (FLAT, GROOVE, RIDGE, SUNKEN, RAISE). highlightcolor Цвет второй границы (когда фрейм имеет фокус). highlightbackground Цвет второй границы (когда фрейм не имеет фокус). highlightthickness Ширина второй границы. LabelFrame [ править ]
LabelFrame — класс фрейма с заголовком. Общий синтаксис его создания:
name — имя фрейма, window — имя окна, на котором он располагается.
Свойство Значение width Ширина фрейма. height Высота фрейма. bg Фон фрейма. activebackground Цвет фона (когда полосу прокрутки двигают). disabledbackground Цвет фона (когда свойство state == DISABLED). state Состояние фрейма (NORMAL, DISABLED). relief Рельеф границы фрейма (FLAT, GROOVE, RIDGE, SUNKEN, RAISE). highlightcolor Цвет второй границы (когда фрейм имеет фокус). highlightbackground Цвет второй границы (когда фрейм не имеет фокус). highlightthickness Ширина второй границы. text Заголовок фрейма. Listbox [ править ]
Listbox — класс списка. Общий синтаксис его создания:
name — имя списка, window — имя окна, на котором он располагается.
Свойство Значение width Ширина списка. height Высота списка. bg Фон списка. disabledforeground Цвет фона (когда свойство state == DISABLED). state Состояние списка (NORMAL, DISABLED). relief Рельеф границы списка (FLAT, GROOVE, RIDGE, SUNKEN, RAISE). highlightcolor Цвет второй границы (когда фрейм имеет фокус). highlightbackground Цвет второй границы (когда фрейм не имеет фокус). highlightthickness Ширина второй границы. selectbackground Цвет фона выделенных пунктов списка. selectforeground Цвет текста выделенных пунктов списка. text Заголовок списка. Ниже a — имя списка.
Функция Значение a. get(начало,конец) Получает фрагмент список из названий элементов списка. В список попадут элементы, индексы которых, находятся в диапазоне, определенным первым параметром и последним его параметром. a. insert(позиция,название_элемента) Вставляет элемент в список после данного индекса. Индекс указан в качестве параметра позиции. (Нумерация идет с 0.) a. delete(начало,конец) Удаляет из списка все элементы, индексы которых, попадают в диапазон, который начинается с индекса, определенным первым параметром и заканчивается индексом, определенным вторым параметром. Canvas [ править ]
Canvas — класс полотна для рисования. Общий синтаксис создания полотна:
name — имя полотна для рисования, window — имя окна, на котором оно располагается.
Свойство Значение width Ширина полотна для рисования. height Высота полотна для рисования. bd Ширина границы полотна для рисования. state Состояние полотна для рисования (NORMAL, DISABLED). highlightcolor Цвет границы (когда на полотне рисуют). Ниже a — окно полотно для рисования.
Функция Описание a. create_line(x,y,x1,y1) Рисует линию между точками (x,y) и (x1,y1) на полотне a. a. create_rectangle(x,y,x1,y1) Рисует прямоугольник с верхней левой точкой (x,y) и нижней правой (x1,y1) на полотне a. a. create_oval(x,y,x1,y1) Рисует овал в границах прямоугольника с верхней левой точкой (x,y) и нижней правой (x1,y1) на полотне a. a. create_polygon(x,y, . ,xn,yn) Рисует ломанную по точкам (x,y) . (xn,yn) на полотне a. a. create_text(x,y,x1,y1) Рисует текст, центрируя его по точке (x,y) и (x1,y1), на полотне a. Фигуры [ править ]
Item — элемент (фигура), нарисованная на полотне Canvas. Синтаксис создания ссылки на item:
name — имя ссылки на item, canvas_ — имя Canvas, на котором рисуется фигура, method — одно из: create_line, create_rectangle, create_oval, create_polygon, create_text с соответственными методу параметрами.
PanedWindow [ править ]
PanedWindow — класс разделителя окна. Общий синтаксис его создания:
name — имя разделителя окна; window — имя окна, на котором он располагается; k — его ориентация (VERTICAL — вертикальна, HORIZONTAL — горизонтальна).
Свойство Значение bg Фон элемента разделить окна. sashpad Толщина в линии разделителя. Ниже a — элемент класса PanedWindow.
Количество разделяющих виджет a линий становится равным k-1, где k — количество входящих в a виджетов.
Menu [ править ]
Menu — класс главного меню. Общий синтаксис создания экземпляра меню:
name_main — имя экземпляра меню, window — имя окна, на котором оно располагается.
Подменю [ править ]
Для заполнения меню, используйте:
name_main — имя кнопки меню, M — имя экземпляра меню, t — текст, являющийся отображаемым названием подменю.
Свойство Значение bg Фон подменю. fg Цвет текста подменю. Заполнять командами подменю можно так:
name_undermenu — имя подменю, в которое добавиться команда; f — имя функции, которая выполнится при выбора данной команды.
Ниже a — подменю.
Функция Описание a. add_separator() Вставляет горизонтальный разделитель после предыдущего пункта подменю a. a. add_checkbutton() Добавляет в подменю a кнопку-флажок. a. add_radiobutton() Добавляет в подменю a радио-кнопку.. Виджеты в подменю [ править ]
Все виджеты подменю обладают основными свойствами виджетов вне меню.
Свойство Значение width Ширина виджета. height Высота виджета. text Текст около виджета. bg Фон виджета. fg Цвет виджета. bd Ширина границы виджета. activebackground Цвет фона. activeforeground Цвет текста. disabledbackground Цвет фона (когда свойство state == DISABLED). disabledforeground Цвет текста (когда свойство state == DISABLED). state Состояние виджета (NORMAL, DISABLED). Также у виджетов подменю присутствуют специфические для каждого класса виджетов свойства.
Tk [ править ]
Tk — класс главной формы. Общий синтаксис создания окна:
name — имя окна потомка.
Свойство Значение bg Фон окна. Ниже a — окно главное окно.
Функция Описание a. title(m) Устанавливает заголовок m окна a. a. minsize(x,y) Устанавливает минимальный размер xxy окна a. a. maxsize(x,y) Устанавливает максимальный размер xxy окна a. Курсор [ править ]
Свойство Значение event.x Позиция курсора по X во время события. event.y Позиция курсора по Y во время события. Toplevel [ править ]
Toplevel — класс окна верхнего уровня. Общий синтаксис создания окна:
name — имя окна потомка, window — имя окна, потомком которого оно является.
Свойство Значение bg Фон окна. Ниже a — окно верхнего уровня.
Функция Описание a. title(m) Устанавливает заголовок m окна a. a. minsize(x,y) Устанавливает минимальный размер xxy окна a. a. maxsize(x,y) Устанавливает максимальный размер xxy окна a. Обработка событий [ править ]
Для обработки событий пишите:
a — имя виджета, у которого настраивается реакция на событие e. При наступлении события будет выполниться функция f).
- Функция должна описываться следующим образом, если она «привязывается» к некоторому виджету методом bind:
- В случае, когда для этого используется метод command (функция будет срабатывать только про событии «<Button-1>»), пишется без event:
Общий вид описания события Описание события «<Button- m >» События нажатия одной из кнопок мыши (левой, правой и колесика). m должна быть равна одному из значений:
- 1 — нажата левая кнопка мыши (курсор над виджетом)
- 2 — нажата правая кнопка мыши (курсор над виджетом)
- 3 — нажато колесико мыши (курсор над виджетом)
k определяет название клавиши, которая нажата.
n должна быть равна одному из значений:
- 1 — нажата левая кнопка мыши во время движения курсора над виджетом
- 2 — нажата правая кнопка мыши во время движения курсора над виджетом
- 3 — нажато колесико мыши во время движения курсора над виджетом
Упаковщики геометрии [ править ]
Упаковщик геометрии — функция, используемая 1 раз для того, чтобы виджет отобразился в нужном месте с настроенными параметрами на экране.
Ниже a — некоторый виджет.
- side==LEFT (состыковывает виджет к предыдущему к его левому краю или в плотную к левому краю окна)
- side==RIGHT (состыковывает виджет к правому левому краю или)
- side==TOP (состыковывает виджет к нижнему краю прошлого виджета либо верхнему краю окна)
- side==BOTTOM (состыковывает виджет к верхнему краю прошлого виджета либо нижнему краю окна)
- side==MIDDLE (помещает виджет в центр окна)
Размеры колонок и строк определяются размерами входящих в них виджетов.
Диалоговые окна [ править ]
С помощью tkinter.messagebox можно создавать диалоговые окна. Для этого нужно отдельно его импортировать:
вид диалогового окна Описание messagebox.showinfo Создаёт окно с информацией messagebox.askyesno Создаёт окно по типу да-нет askopenfilename [ править ]
askopenfilename — класс окна открытия файла. Общий синтаксис создания окна:
После выборе файла name будет хранить путь к этому файлу, что позволит считать его содержимое.
asksavefilename [ править ]
asksavefilename — класс окна сохранения файла. Общий синтаксис создания окна:
После выборе файла name будет хранить путь к этому файлу, что позволит сохранить в него содержимое.
Создание, изменение и проверка текста / tkinter 2
Виджет Entry представляет собой текстовый элемент на одной строке. Вместе с классами Label и Button он является одним из самых используемых в Tkinter.
Как создать текстовый элемент
Следующий пример демонстрирует, как создать форму логина с двумя экземплярами для полей username и password . Каждый символ password отображается в качестве звездочки. Кнопка Войти выводит значения в консоли, а Очистить — удаляет содержимое обоих полей, возвращая фокус в username :

Как работают экземпляры
Экземпляры виджетов Entry создаются в родительском окне или фрейме, будучи переданными в качестве первого аргумента. С помощью опциональных ключевых слов можно задать дополнительные свойства. У username в этом примере таких нет, а у password — аргумент show со строкой «*», который будет выводить каждый символ как звездочку.
С помощью метода get() текущий текст можно будет получить в виде строки. Это используется в методе print_login() , который выводит содержимое Entry в стандартном выводе ( stdout ).
Метод delete() принимает два аргумента, которые представляют собой диапазон символов для удаления. Важно только помнить, что индексы начинаются с 0 и не включают последний символ. Если передать только один аргумент, то удалится символ на этой позиции.
В методе clear_form() удаляется содержимое от индекса 0 до константы END , в результате чего весь контент очищается. После этого фокус возвращается в поле username .
Содержимое виджета Entry можно модифицировать с помощью метода insert() , который принимает два аргумента:
- index — позиция, куда нужно вставить текст (индекс первого — 0)
- string — строка, которая будет вставлена
Стандартный шаблон сброса содержимого на значение по умолчанию — комбинация методов delete() и insert() :
Еще один паттерн — добавление текста туда, где находится курсор. Для этого используется константа INSERT :
Как и Button класс Entry также принимает параметры relief и state для изменения стиля контура и состояния. Также стоит отметить, что вызовы delete() и insert() игнорируются, когда состояние равно «disabled» или «readonly».
Отслеживание изменений текста
Переменные Tk позволяют отправлять уведомления приложениям, когда входящие значения меняются. Есть 4 класса переменных в Tkinter: BooleanVar , DoubleVar , IntVar и StringVar . Каждый из них оборачивает значение соответствующего типа Python, который должен соответствовать типу виджета, прикрепленного к переменной.
Эта особенность особенно полезна в том случае, если нужно автоматически обновить отдельные части приложения на основе текущего состояния виджетов.
Как отслеживать изменения текста
В следующем примере экземпляр StringVar ассоциирован с Entry, у которого есть параметр textvariable . Такие переменные отслеживают операции записи с помощью метода обратного вызова show_message() :
Когда что-то вводится в этот виджет, текст метки обновляется на тот, что был составлен с помощью значения переменной Tk . Например, если ввести слово «Мир», то метка выведет Привет, Мир! . Если текст не вводить совсем, то ничего и не будет выводиться. Для демонстрации возможностей интерактивной настройки содержимого переменной была добавлена кнопка, которая очищает поле по нажатию.

Как работает изменение текста
Первые строки конструктора приложения создают экземпляр StringVar и прикрепляют функцию обратного вызова для режима записи. Валидные значения этого режима:
- w — вызывается, когда переменная пишется
- r — вызывается, когда переменная читается
- u (от unset) — вызывается, когда переменная удаляется
При вызове функция обратного вызова получает три аргумента: внутреннее имя переменной, пустую строку (она используется в других типах переменных Tk ) и режим, который запустил операцию. При объявлении его с *args эти аргументы становятся опциональными, потому что при обратном вызове значения уже не используются.
Метод get() оберток Tk возвращает текущее значение переменной, а метод set() — обновляет его. Они также уведомляют все методы прослушки ( trace ). Поэтому изменение содержимого поля с помощью графического интерфейса и нажатие кнопки Очистить запускают вызов метода show_message() .
Переменные Tk являются опциональными для виджетов поля, но они обязательны для работы других классов виджетов, таких как классы Checkbutton и Radiobutton .
Валидация текста в полях
Чаще всего поля для ввода текста представляют собой поля, которые следуют определенным правилам валидации, например, максимальная длина или определенный формат. Некоторые приложения предоставляют возможность ввода содержимого любого вида и выполняют валидацию уже после того как вся форма целиком была отправлена.
При определенных условиях нужно предотвратить возможность ввода невалидного содержимого в поле текста. Следующие примеры рассмотрят, как реализовать такое поведение с помощью параметров валидации в виджете Entry.
Как валидировать текст
Следующее приложение демонстрирует, как валидировать текст в поле ввода с помощью регулярных выражений:
Если запустить этот скрипт и ввести не букву алфавита или цифру, то содержимое не изменится, а вместо этого будет выведено сообщение об ошибке в консоль. Это же будет происходить, если попытаться ввести больше 10 символов, поскольку регулярное выражение ограничивает общее количество.
Как работает валидация текста
Когда параметром validate является key , то валидация запускается при любом изменении содержимого. Значение по умолчанию — none , что значит, что валидации не будет.
Также значениями могут быть focusin или focusout , когда валидация выполняется при получении или потере фокуса. Значение focus выполняет проверку в обоих случаях. Во всех ситуациях валидация проходит, если установить значение all .
Функция validatecommand вызывается каждый раз при запуске валидации. Она должна возвращать true , если введенное содержимое прошло проверку. В противном случае — false .
Поскольку нужно больше информации, чтобы определить, является ли контент валидным, над функцией Python создается обертка Tcl с помощью метода register класса Widget . Затем добавляется замещение для каждого параметра, который будет передаться в функцию. В итоге эти значения группируются в кортеж. Описанное соответствует следующей строке из примера:
vcmd = (self.register(self.validate_username), «%i», «%P»)
Можно использовать следующие замещения:
- %d — тип действия. 1 — добавление, 0 — удаление, -1 — остальное;
- %i — индекс вставляемой или удаляемой строки;
- %p — сущность содержимого, если изменение разрешено;
- %s — строковое содержимое до изменения;
- %s — строка, которая вставляется или удаляется;
- %v — тип текущей валидации;
- %V— тип валидации, которая запускает действие;
- %w — название виджета Entry.
Параметр invalidcommand принимает функцию, которая вызывается, когда validatecommand возвращает false . Те же замещения могут быть применены и к нему, но в данном примере классу был прямо передан метод print_error() .
Документация Tcl/Tk предполагает, что не нужно смешивать параметры validatecommand и textvariable , поскольку невалидое значение переменной Tk вообще отключит проверку. То же самое произойдет, если функция validatecommand не вернет булевое значение.