Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Алгоритмизация и программирование. Язык Python. Учебное пособие
.pdf
Рис. 8. Пустое окно
По умолчанию окно позиционируется в верхний левый угол экрана. Но
можно изменить его положение, передав нужные значения в метод geometry().
Пример
from tkinter import *
root = Tk()
root.title("Графическая программа на Python")
root.geometry("400x300+300+250") # окно будет находиться на 300 пикселей
вправо и на 250 пикселей вниз от верхнего левого угла экрана
root.mainloop()
9.2. Кнопки
Модуль tkinter содержит набор компонентов или виджетов, одним из которых является кнопка.
Пример
from tkinter import *
root = Tk()
root.title("GUI на Python") # определение заголовка окна
root.geometry("300x250") #определение размера окна
btn = Button(text="Hello") # создание кнопки с помощью конструктора Button(),
параметр text предназначен для размещения надписи на кнопке
btn.pack() # элемент кнопка делается видимым с помощью метода pack()
root.mainloop()
В результате, при запуске скрипта на экране отобразится окно с кнопкой
(рис. 9).
91

Рис. 9. Окно с кнопкой
Каждый графический элемент, в том числе кнопка, имеет ряд атрибутов,
которые влияют на ее визуализацию и которые можно настроить через кон-
структор.
Пример
from tkinter import *
root = Tk()
root.title("GUI на Python")
root.geometry("300x250")
btn = Button(text="Hello", # текст кнопки
background="#555", # фоновый цвет кнопки
foreground="#ccc", # цвет текста
padx="20", # отступ от границ до содержимого по горизонтали
pady="8", # отступ от границ до содержимого по вертикали
font="16" # высота шрифта
)
btn.pack()
root.mainloop()
Параметры pady, padx, font принимают числовое значение, а параметры
background и foreground получают шестнадцатеричное значение цвета. Пара-
метр font содержит определение шрифта. В результате, при запуске скрипта на
экране отобразится окно с кнопкой (рис. 10).
92

Параметр
Назначение
activebackground:
Цвет кнопки, когда она находится в нажатом состоянии
activeforeground:
Цвет текста кнопки, когда она в нажатом состоянии
bd:
Толщина границы (по умолчанию 2)
bg/background:
Фоновый цвет кнопки
fg/foreground:
Цвет текста кнопки
Рис. 10. Окно с кнопкой
Всего же конструктор Button может принимать следующие параметры:
Button (master, options)
Параметр master представляет ссылку на родительский контейнер. В случае выше это могло бы быть само графическое окно.
Пример
root = Tk()
root.title("GUI на Python")
root.geometry("300x250")
btn = Button(root, text="Hello")
btn.pack()
Однако если в коде создается одно окно, то кнопка и любой другой элемент уже по умолчанию размещаются в этом окне. Поэтому первый параметр
можно опустить, как в примерах выше. Если бы в коде создавалось бы несколько окон, тогда можно передать в конструктор Button ссылку на нужное окно.
Второй параметр options представляет набор параметров, которые можно
установить по их имени. Перечень параметров представлен в табл. 8.
Т а б л и ц а 8. Набор параметров параметра options конструктора Button
93

Параметр
Назначение
font:
Шрифт текста. Например:
font="Arial 14" – шрифт Arial высотой 14px
font=("Verdana", 13, "bold") – шрифт Verdana высотой 13px с выделением жирным
height:
Высота кнопки
highlightcolor:
Цвет кнопки, когда она в фокусе
image:
Изображение на кнопке
justify:
Устанавливает выравнивание текста. Значение LEFT выравнива-
ет текст по левому краю, CENTER – по центру, RIGHT – по правому краю
padx:
Отступ от границ кнопки до ее текста справа и слева
pady:
Отступ от границ кнопки до ее текста сверху и снизу
relief:
Определяет тип границы, может принимать значения SUNKEN
(утопленная), RAISED (приподнятая), GROOVE (с пазами),
RIDGE (хребет)
state:
Устанавливает состояние кнопки, может принимать значения
DISABLED (не активное), ACTIVE (активное), NORMAL (по
умолчанию)
text:
Устанавливает текст кнопки
textvariable:
Устанавливает привязку к элементу StringVar
underline:
Указывает на номер символа в тексте кнопки, который подчер-
кивается. По умолчанию значение -1, то есть никакой символ не
подчеркивается
width:
Ширина кнопки
wraplength:
При положительном значении строка текста будут переносится
для вмещения в пространство кнопки
Окончание табл. 8
Для обработки нажатия на кнопку необходимо установить в конструкторе
параметр command, присвоив ему ссылку на функцию, которая будет срабаты-
вать при нажатии.
Пример
from tkinter import *
clicks = 0
def click_button():
global clicks
clicks += 1
root.title("Clicks {}".format(clicks))
root = Tk()
root.title("GUI на Python")
root.geometry("300x250")
btn = Button(text="Click Me", background="#555", foreground="#ccc",
padx="20", pady="8", font="16", command=click_button)
94

btn.pack()
root.mainloop()
В качестве обработчика нажатия на кнопку выступает функция
click_button. В этой функции изменяется глобальная переменная clicks, которая
хранит число кликов, и ее значение выводится в заголовок окна. Таким образом, при каждом нажатии на кнопку будет срабатывать функция click_button, и
количество кликов будет увеличиваться. На рис. 11 представлен пример работы
функции click_button.
Рис. 11. Окно с кнопкой
9.3. Изменение свойств элементов
Иногда в процессе работы может возникнуть потребность изменить какие-либо атрибуты кнопки, например, текст. Однако у элемента кнопки нет ме-
тода для внесения изменения в текст. Для изменения текста можно воспользо-
ваться промежуточным объектом StringVar, который позволит создать привязку к строке. Объект StringVar имеет два методы:
get(): возвращает строку из StringVar;
set(str): устанавливает строку в StringVar.
Для связи объекта StringVar с текстом визуального элемента необходимо
у элемента в конструкторе установить параметр textvariable.
Пример
# при нажатии на кнопку изменяется ее текст
from tkinter import *
clicks = 0
def click_button():
95

global clicks
clicks += 1
buttonText.set("Clicks {}".format(clicks))
root = Tk()
root.title("GUI на Python")
root.geometry("300x250")
buttonText = StringVar()
buttonText.set("Clicks {}".format(clicks))
btn = Button(textvariable=buttonText, background="#555", foreground="#ccc",
padx="20", pady="8", font="16", command=click_button)
btn.pack()
root.mainloop()
В рассмотренном примере создается переменная buttonText, которая имеет тип StringVar. Для нее устанавливается начальное значение, а затем пере-
менная btn связывается с этим текстом через параметр textvariable. В итоге при
нажатии на кнопку изменится ее текст. На рис. 12 представлен результат выполнения примера.
Кроме компонента StringVar доступен еще ряд подобных компонентов
для других типов данных:
IntVar;
BooleanVar;
DoubleVar.
Например, можно установить привязку к переменной IntVar и выводить
количество кликов.
96
Рис. 12. Окно с кнопкой

Пример
from tkinter import *
def click_button():
clicks.set(clicks.get() + 1)
root = Tk()
root.title("GUI на Python")
root.geometry("300x250")
clicks = IntVar()
clicks.set(0)
btn = Button(textvariable=clicks, background="#555", foreground="#ccc",
padx="20", pady="8", font="Verdana 13", command=click_button)
btn.pack()
root.mainloop()
Но есть и другой способ, который может помочь при необходимости из-
менить не только текст, но и другие параметры кнопки или другого компонента. Это способ заключается в вызове у элемента метода config(), в котором и
устанавливается нужный параметр.
Пример
from tkinter import *
clicks = 0
def click_button():
global clicks
clicks += 1
btn.config(text="Clicks {}".format(clicks))
root = Tk()
root.title("GUI на Python")
root.geometry("300x250")
btn = Button(text="Clicks 0", background="#555", foreground="#ccc",
padx="20", pady="8", font="16", command=click_button)
btn.pack()
root.mainloop()
9.4. Текстовая метка Label
Текстовые метки в Python представлены элементом Label, который предназначен для вывода статического текста без возможности редактирования. Для
создания элемента Label применяется конструктор, который принимает два параметра:
Label(master, options)
Параметр master представляет ссылку на родительский контейнер, а параметр options группу именованных параметров.
97

Параметр
Назначение
anchor:
Устанавливает позиционирование текста: N (север), NE (северовосток), E (восток), SE (юго-восток), SW (юго-запад), W (запад),
NW (северо-запад) или CENTER (центр). По умолчанию NW
(верхний левый угол)
bg/background:
Фоновый цвет
bitmap:
Ссылка на изображение, которое отображается на метке
bd:
Толщина границы метки
fg/foreground:
Цвет текста
font:
Шрифт текста.
Например, font="Arial 14" – шрифт Arial высотой 14px
height:
Высота элемента
cursor:
Курсор указателя мыши при наведении на метку
image:
Ссылка на изображение, которое отображается на метке
justify:
Устанавливает выравнивание текста. Значение LEFT выравнивает
текст по левому краю, CENTER – по центру, RIGHT – по правому
краю
padx:
Отступ от границ элемента до его текста справа и слева
pady:
Отступ от границ элемента до его текста сверху и снизу
relief:
Определяет тип границы, по умолчанию значение FLAT
text:
Устанавливает текст метки
textvariable:
Устанавливает привязку к элементу StringVar
underline:
Указывает на номер символа в тексте кнопки, который подчерки-
вается. По умолчанию значение -1, то есть никакой символ не подчеркивается
width:
Ширина элемента
wraplength:
При положительном значении строки текста будут переносится для
вмещения в пространство элемента
Т а б л и ц а 9. Набор параметров параметра options конструктора Label
Пример
from tkinter import *
root = Tk()
root.title("GUI на Python")
root.geometry("300x250")
label1 = Label(text="Hello Python", fg="#eee", bg="#333")
label1.pack()
# Для переноса текста на другую строку можно использовать эскейппоследовательность \n
poetry = "Вот мысль, которой весь я предан,\nИтог всего, что ум скопил.\nЛишь
тот, кем бой за жизнь изведан,\nЖизнь и свободу заслужил."
label2 = Label(text=poetry, justify=LEFT)
label2.place(relx=.2, rely=.3)
root.mainloop()
98

На рис. 13 представлено окно, являющееся результатом выполнения про-
Параметр
Назначение
bg:
Фоновый цвет
bd:
Толщина границы
cursor:
Курсор указателя мыши при наведении на текстовое поле
fg:
Цвет текста
font:
Шрифт текста
justify:
Устанавливает выравнивание текста. Значение LEFT выравнива-
ет текст по левому краю, CENTER – по центру, RIGHT – по правому краю
relief:
Определяет тип границы, по умолчанию значение FLAT
selectbackground:
Фоновый цвет выделенного куска текста
selectforeground:
Цвет выделенного текста
show:
Задает маску для вводимых символов
state:
Состояние элемента, может принимать значения NORMAL (по
умолчанию) и DISABLED
textvariable:
Устанавливает привязку к элементу StringVar
width:
Ширина элемента
граммного кода.
9.5. Поле ввода Entry
Рис. 13. Окно с двумя текстовыми метками
Элемент Entry представляет поле для ввода текста. Конструктор Entry
принимает следующие параметры:
Entry(master, options)
master – ссылка на родительское окно, а options – набор следующих пара-
метров, представленный в табл. 10.
Т а б л и ц а 10. Набор параметров параметра options конструктора Entry
99

Пример
from tkinter import *
from tkinter import messagebox
def show_message():
messagebox.showinfo("GUI Python", message.get())
root = Tk()
root.title("GUI на Python")
root.geometry("300x250")
message = StringVar()
message_entry = Entry(textvariable=message)
message_entry.place(relx=.5, rely=.1, anchor="c")
message_button = Button(text="Click Me", command=show_message)
message_button.place(relx=.5, rely=.5, anchor="c")
root.mainloop()
На рис. 14 представлено окно, являющееся результатом выполнения программного кода.
Рис. 14. Окно область для ввода текста
Для вывода сообщения здесь применяется дополнительный модуль
messagebox, содержащий функцию showinfo(), которая собственно и выводит
введенный в текстовое поле текст.
Пример
from tkinter import *
from tkinter import messagebox
def display_full_name():
messagebox.showinfo("GUI Python", name.get() + " " + surname.get())
root = Tk()
100
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
