Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Алгоритмизация и программирование. Язык Python. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
06.09.2026
Размер:
1 Мб
Скачать
Рис. 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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]