Окно приложения Tk, виджеты Label, Button, Message, PhotoImage, Frame, Toplevel, Canvas, окна диалога.
По умолчанию, в программах с библиотекой tkinter создаётся объект класса Tk. Объект Tk представляет главное («корневое») окно программы – которое открывается вместе с запуском программы. Остальные виджеты являются дочерними к Tk.
Если в Вашем графическом приложении создаются виджеты, явно объект Tk создавать не обязательно.
Label - этикетки
или так:
Первый аргумент в конструкторе Label определяет объект родительского виджета, к которому нужно прикрепить новую метку. В данном случае, None означает – прикрепить новый виджет Label к главному окну программы (по умолчанию tk).
Message
Message служит для вывода текста. Он может автоматически и гибко разбивать длинные строки. Обладает большим количеством настраиваемых параметров.
Button – кнопки
PhotoImage – Объект с изображением
В библиотеке tkinter кнопки, метки, холсты, текстовые виджеты и меню могут выводить изображения путём передачи графических объектов атрибуту image. Виджет PhotoImage поддерживает файлы форматов GIF, PPM и PGM.
Размещение виджетов
Размещение виджетов в tkinter возможно методами pack(), grid() и placer().
side, параметр метода pack позволяет прикреплять виджет к ближайшему объекту слева LEFT, справа RIGHT, сверху TOP, снизу BOTTOM. Прикрепляясь, виджет занимает с этой стороны всё свободное место, от края и до края.
expand=YES, параметр метода pack предлагает менеджеру компоновки выделять виджету все свободное пространство в родительском контейнере, не занятое другими виджетами.
fill, параметр метода pack используется для растяжения виджета, значение BOTH чтобы он занял все выделенное ему пространство, значение X – растянуть по горизонтали, значение Y – растянуть по вертикали.
anchor, параметр метода pack позволяет располагать виджет в одном из 8 желательных направлений в отведённом с помощью параметра side пространстве, если виджет не занимает в этом пространстве всё свободное место. Параметр anchor может принимать значения E, NE, N, NW, W, SW, S, SE и CENTER по умолчанию.
Frame
Для размещения виджетов удобно использовать фреймы Frame. Frame – виджет, который может быть не видимым и сожет служить контейнером для других виджетов.
Toplevel
Toplevel создаёт дополнительные окна и служит для организации многооконного интерфейса.
Окна Toplevel независимы друг от друга но закрываются все при закрытии главного окна.
Одно из окон можно сделать модальным следующими методами:
Вы можете таким же образом создать несколько окон Tk, каждое из которых можно будет закрывать независимо от других окон.
Окна стандартного диалога
Dialog
Изменение параметров виджета
Изменение параметров виджета, чаще всего делают, после его создания с помощью метода config().
Стиль шрифта может принимать значения normal, bold, roman, italic, underline, overstrike и их сочетания.
Стиль рамки может принимать значения FLAT, SUNKEN, RAISED, GROOVE, SOLID или RIDGE.
Некоторые виджеты поддерживают понятие состояния, влияющее на их внешний вид. Параметр state=DISABLED обычно выглядит серым и делается неактивным. Значение NORMAL делает его обычным. Некоторые виджеты поддерживают также состояние READONLY.
Вокруг многих виджетов (кнопок, меток и текста) можно добавить отступы padx=N и pady=N. Интересно, что эти параметры можно определять и в вызовах метода pack(). В одном случае создаётся отступ, а во втором — набивка.
Обработчики событий
Обработчики событий виджета создаются как функции а затем регистрируются в виджете как свойство command.
Функция обработчика определяется в свойстве command без скобок и, соответственно, передать параметры в эту функцию невозможно. Это ограничение легко преодолевается за счёт использования глобальных переменных.
lambda функция в обработчике событий
lambda функция позволяет передавать параметры в обработчик событий, а оператор or дал нам возможность выполнить две функции одной строкой.
lambda функция позволяет сохранить параметр существовавший на этапе создания виджета, а на этапе выполнения программы передать это значение в обработчик события. В примере выше, на этапе выполнения программы счётчик цикла for переменная i = 9, но lambda функция будет передавать в обработчик clck() то значение i, которое было на этапе создания Btn.
bind обработчики событий
bind обработчики событий виджета создаются как функции с параметром event а затем регистрируются в методах bind как второй параметр. Первый параметр метода bind – это идентификатор события, например:
- <Button-1> щелчок левой кнопкой мыши
- <Button-3> щелчок правой кнопкой мыши
- <Button-2> щелчок средней кнопкой мыши (может быть двумя кнопками)
- <Double-1> двойной щелчок левой кнопкой мыши
- <B1-Motion> перетаскивание левой кнопкой мыши
- <KeyPress> нажатие клавиши на клавиатуре
- <Up> нажатие клавиши со стрелкой вверх на клавиатуре
- <Down>
- <Left>
- <Right>
- <Return> нажатие клавиши Enter на клавиатуре
И ещё несколько идентификаторов событий, которые можно использовать с методом bind():
- <ButtonRelease>
- <ButtonPress>
- <Motion>
- <Enter>
- <Leave>
- <Configure>
- <Destroy>
- <FocusIn>
- <FocusOut>
- <Map>
- <Unmap>
- <Escape>
- <BackSpace>
- <Tab>
- <KeyPress-a>
Entry – поле ввода
В этом примере поле ввода получает фокус и выводит текст в командную строку после нажатия клавиши Enter или по нажатию кнопки "OK".
С полем Entry можно связать следующие классы из библиотеки tkinter:
- StringVar
- IntVar
- DoubleVar
- BooleanVar
После того как переменные будут связаны, операции изменения и получения значения переменной поля Entry можно заменить на те же методы set() и get(), применяя их к объектам класса StringVar, IntVar, DoubleVar или BooleanVar. Замечание, объекты класса StringVar, IntVar, DoubleVar или BooleanVar необходимо создавать после того, как уже создано главное окно программы (root) методом Tk() явно или неявно.
Checkbutton – переключатель
Checkbutton реализует интерфейс с выбором одного из 2-х состояний виджета.
Radiobutton – группа переключателей
Radiobutton реализует модель выбора единственного из нескольких взаимоисключающих вариантов. Атрибут variable у Radiobutton служит для связывания кнопок в группу с помощью переменной и получения текущего выбора в произвольный момент времени. Атрибут value, присваивается ассоциированной переменной группы когда производится выбор кнопки.
Scale – ползунок
Виджет Scale позволяет реализовать интерфейс выбора целого числа в определённом диапазоне с помощью мышки. Делается это путём перетаскивания ползунка.
Canvas – Холст
Создание класса виджета
Goodbye
Литература:
Марк Лутц. Программирование на Python.
Олег Цилюрик. Разработка GUI-приложений.
Яндекс. Обучение Python GUI уроки по Tkinter.