Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Алгоритмизация и программирование. Язык Python. Учебное пособие
.pdf
root.title("GUI на Python")
name = StringVar()
surname = StringVar()
name_label = Label(text="Введите имя:")
surname_label = Label(text="Введите фамилию:")
name_label.grid(row=0, column=0, sticky="w")
surname_label.grid(row=1, column=0, sticky="w")
name_entry = Entry(textvariable=name)
surname_entry = Entry(textvariable=surname)
name_entry.grid(row=0,column=1, padx=5, pady=5)
surname_entry.grid(row=1,column=1, padx=5, pady=5)
message_button = Button(text="Click Me", command=display_full_name)
message_button.grid(row=2,column=1, padx=5, pady=5, sticky="e")
root.mainloop()
На рис. 15 представлено окно, являющееся результатом выполнения программного кода.
Элемент Entry имеет ряд методов. Основными из которых представлены в
табл. 11.
Рис. 15. Окно с областями для ввода данных и окном,
отображающим введенные значения
101

Параметр
Назначение
insert(index, str):
Вставляет в текстовое поле строку по определенному ин-
дексу
get():
Возвращает введенный в текстовое поле текст
delete(first, last=None):
Удаляет символ по индексу first. Если указан параметр
last, то удаление производится до индекса last. Чтобы уда-
лить до конца, в качестве второго параметра можно ис-
пользовать значение END
Т а б л и ц а 11. Основные методы элемента Entry
Пример
from tkinter import *
from tkinter import messagebox
def clear():
name_entry.delete(0, END) # кнопка Clear очищает поле, вызывая метод de-
lete
surname_entry.delete(0, END) # кнопка Clear очищает поле, вызывая метод
delete
def display():
messagebox.showinfo("GUI Python", name_entry.get() + " " + surname_entry.get()) # кнопка, используя метод get, получает введенный текст
root = Tk()
root.title("GUI на Python")
name_label = Label(text="Введите имя:")
surname_label = Label(text="Введите фамилию:")
name_label.grid(row=0, column=0, sticky="w")
surname_label.grid(row=1, column=0, sticky="w")
name_entry = Entry()
surname_entry = Entry()
name_entry.grid(row=0,column=1, padx=5, pady=5)
surname_entry.grid(row=1,column=1, padx=5, pady=5)
# вставка начальных данных
name_entry.insert(0, "Tom") # добавление в текстовое поле текста по умолча-
нию
surname_entry.insert(0, "Soyer") # добавление в текстовое поле текста по умол-
чанию
display_button = Button(text="Display", command=display)
clear_button = Button(text="Clear", command=clear)
display_button.grid(row=2, column=0, padx=5, pady=5, sticky="e")
clear_button.grid(row=2, column=1, padx=5, pady=5, sticky="e")
root.mainloop()
102

9.6. Элемент Checkbutton
Элемент Checkbutton представляет собой флажок, который может находиться в двух состояниях: отмеченном и неотмеченном.
Пример
from tkinter import *
root = Tk()
root.title("GUI на Python")
root.geometry("300x250")
ismarried = IntVar()
ismarried_checkbutton = Checkbutton(text="Женат/Замужем", variable=ismarried)
ismarried_checkbutton.pack()
ismarried_label = Label(textvariable=ismarried)
ismarried_label.place(relx=.5, rely=.5, anchor="c")
root.mainloop()
Отличительной чертой Checkbutton является возможность привязки к
компоненту IntVar через параметр variable. В отмеченном состоянии привязанный компонент IntVar имеет значение 1, а в неотмеченном – 0. В итоге через
IntVar мы можем получать значение, указанное пользователем.
На рис. 16 представлено окно, являющееся результатом выполнения программного кода.
Рис. 16. Окно с флажком
Конструктор Checkbutton принимает ряд параметров, с помощью которого можно настроить отображение флажков:
Checkbutton(master, options)
103

Параметр
Назначение
activebackground:
Фоновый цвет флажка в нажатом состоянии
activeforeground:
Цвет текста флажка в нажатом состоянии
bg:
Фоновый цвет флажка
bitmap:
Монохромное изображение для флажка
bd:
Граница вокруг флажка
command:
Ссылка на функцию, которая вызывается при нажатии на
флажок
cursor:
Курсор при наведении на элемент
disabledforeground:
Цвет текста в состоянии DISABLED
font:
Шрифт
fg:
Цвет текста
height:
Высота элемента
image:
Графическое изображение, отображаемое на элементе
justify:
выравнивание текста, принимает значения CENTER,
LEFT, RIGHT
offvalue:
Значение ассоциированной с флажком переменной IntVar
в неотмеченном состоянии, по умолчанию равно 0
onvalue:
Значение ассоциированной с флажком переменной IntVar
в отмеченном состоянии, по умолчанию равно 1
padx:
Отступы справа и слева от текста до границы флажка
pady:
Отступы сверху и снизу от текста до границы флажка
relief:
Стиль флажка, по умолчанию имеет значение FLAT
selectcolor:
Цвет квадратика флажка
selectimage:
Изображение на флажке, когда он находится в отмеченном
состоянии
state:
Состояние элемента, может принимать значения
NORMAL (по умолчанию), DISABLED и ACTIVE
text:
Текст элемента
underline:
Индекс подчеркнутого символа в тексте флажка
variable:
Ссылка на переменную, как правило, типа IntVar, которая
хранит состояние флажка
width:
Ширина элемента
wraplength:
Устанавливает перенос символов на другую строку в тек-
сте элемента
Параметр master представляет ссылку на родительское окно, а параметр
options представляет набор параметров. В табл. 12 представлен набор парамет-
ров options.
Т а б л и ц а 12. Набор параметров параметра options конструктора
Checkbutton
Пример
from tkinter import *
root = Tk()
104

root.title("GUI на Python")
root.geometry("300x250")
python_lang = IntVar()
python_checkbutton = Checkbutton(text="Python", variable=python_lang,
onvalue=1, offvalue=0, padx=15, pady=10)
python_checkbutton.grid(row=0, column=0, sticky=W)
javascript_lang = IntVar()
javascript_checkbutton = Checkbutton(text="JavaScript", variable=javascript_lang,
onvalue=1, offvalue=0, padx=15, pady=10)
javascript_checkbutton.grid(row=1, column=0, sticky=W)
root.mainloop()
На рис. 17 представлено окно, являющееся результатом выполнения программного кода.
Рис. 17. Окно с двумя флажками
9.7. Элемент Radiobutton
Элемент Radiobutton представляет переключатель, который может находиться в двух состояниях: отмеченном или неотмеченном, но в отличие от
Checkbutton переключатели могут создавать группу, из которой одномоментно
можно выбрать только один переключатель.
Пример
from tkinter import *
root = Tk()
root.title("GUI на Python")
root.geometry("300x250")
105

header = Label(text="Выберите курс", padx=15, pady=10)
header.grid(row=0, column=0, sticky=W)
lang = IntVar()
python_checkbutton = Radiobutton(text="Python", value=1, variable=lang, padx=15,
pady=10)
python_checkbutton.grid(row=1, column=0, sticky=W)
javascript_checkbutton = Radiobutton(text="JavaScript", value=2, variable=lang,
padx=15, pady=10)
javascript_checkbutton.grid(row=2, column=0, sticky=W)
selection = Label(textvariable=lang, padx=15, pady=10)
selection.grid(row=3, column=0, sticky=W)
root.mainloop()
В представленном примере определены два переключателя, привязанные
к одной переменной IntVar. При этом они имеют разные значения, устанавливаемые через параметр value. Поэтому при включении одного переключателя
другой автоматически перейдет в неотмеченное состояние.
На рис. 18 представлено окно, являющееся результатом выполнения программного кода.
Рис. 18. Окно с двумя переключателями
Для настройки переключателя конструктор Radiobutton, как и других конструкторов, используются два параметра:
Radiobutton (master, options)
Первый параметр master представляет ссылку на родительское окно, а
второй параметр options объединяет набор параметров. В табл. 13 представлен
набор параметров options.
106

Т а б л и ц а 13. Набор параметров параметра options конструктора
Параметр
Назначение
activebackground:
Фоновый цвет переключателя в нажатом состоянии
activeforeground:
Цвет текста переключателя в нажатом состоянии
bg:
Фоновый цвет переключателя
bitmap:
Монохромное изображение для переключателя
borderwidth:
Граница вокруг переключателя
command:
Ссылка на функцию, которая вызывается при нажатии на пере-
ключатель
cursor:
Курсор при наведении на элемент
font:
Шрифт
fg:
Цвет текста
height:
Высота элемента в строках текста. По умолчанию равно 1
image:
Графическое изображение, отображаемое на элементе
justify:
выравнивание текста, принимает значения CENTER, LEFT,
RIGHT
padx:
Отступы справа и слева от текста до границы переключателя
pady:
Отступы сверху и снизу от текста до границы переключателя
relief:
Стиль переключателя, по умолчанию имеет значение FLAT
selectcolor:
Цвет кружка переключателя
selectimage:
Изображение на переключателе, когда он находится в отмечен-
ном состоянии
state:
Состояние элемента, может принимать значения NORMAL (по
умолчанию), DISABLED и ACTIVE
text:
Текст элемента
textvariable:
Устанавливает привязку к переменной StringVar, которая задает
текст переключателя
underline:
Индекс подчеркнутого символа в тексте элемента
variable:
Ссылка на переменную, как правило, типа IntVar, которая хранит
состояние переключателя
value:
Значение переключателя
width:
Ширина элемента
wraplength:
Устанавливает перенос символов на другую строку в тексте эле-
мента
Radiobutton
Пример
from tkinter import *
languages = [("Python", 1), ("JavaScript", 2), ("C#", 3), ("Java", 4)]
def select():
l = language.get()
if l == 1:
sel.config(text="Выбран Python")
elif l == 2:
107

sel.config(text="Выбран JavaScript")
elif l == 3:
sel.config(text="Выбран C#")
elif l == 4:
sel.config(text="Выбран Java")
root = Tk()
root.title("GUI на Python")
root.geometry("300x280")
header = Label(text="Выберите курс", padx=15, pady=10)
header.grid(row=0, column=0, sticky=W)
language = IntVar()
row = 1
for txt, val in languages:
Radiobutton(text=txt, value=val, variable=language, padx=15, pady=10, command=select)\
.grid(row=row, sticky=W)
row += 1
sel = Label(padx=15, pady=10)
sel.grid(row=row, sticky=W)
root.mainloop()
На рис. 19 представлено окно, являющееся результатом выполнения программного кода.
108
Рис. 19. Окно с четырьмя переключателями

9.8. Элемент Listbox
Элемент Listbox в tkinter представляет список объектов.
Пример
from tkinter import *
languages = ["Python", "JavaScript", "C#", "Java"]
root = Tk()
root.title("GUI на Python")
root.geometry("300x280")
languages_listbox = Listbox()
for language in languages:
languages_listbox.insert(END, language)
languages_listbox.pack()
root.mainloop()
Для наполнения listboxa элементами в цикле for проходим по всем элементам списка languages и добавляем каждый элемент в listbox с помощью метода insert(). В качестве первого аргумента в insert передается индекс вставки
элемента, но для последовательного добавление элементов следует вместо индекса использовать значение END.
На рис. 20 представлено окно, являющееся результатом выполнения программного кода.
Для настройки элемента Listbox можно указать в его конструкторе параметры:
Рис. 20. Окно со списком из четрых значений
Listbox (master, options)
109

Параметр
Назначение
bg:
Фоновый цвет
bd:
Толщина границы вокруг элемента
cursor:
Курсор при наведении на Listbox
font:
Настройки шрифта
fg:
Цвет текст
height:
Высота элемента в строках. По умолчанию отображает 10 строк
highlightcolor:
Цвет элемента, когда он получает фокус
highlightthickness:
Толщина границы элемента, когда он находится в фокусе
relief:
Устанавливает стиль элемента, по умолчанию имеет значение
SUNKEN
selectbackground:
Фоновый цвет для выделенного элемента
selectmode:
Определяет, сколько элементов могут быть выделены. Может
принимать следующие значения: BROWSE, SINGLE,
MULTIPLE, EXTENDED. Например, если необходимо включить множественное выделение элементов, то можно использо-
вать значения MULTIPLE или EXTENDED
width:
Устанавливает ширину элемента в символах. По умолчанию
ширина – 20 символов
xscrollcommand:
Задает горизонтальную прокрутку
yscrollcommand:
Устанавливает вертикальную прокрутку
В табл. 14 представлен набор параметров options.
Т а б л и ц а 14. Набор параметров параметра options конструктора Listbox
Пример
from tkinter import *
languages = ["Python", "JavaScript", "C#", "Java", "C/C++", "Swift",
"PHP", "Visual Basic.NET", "F#", "Ruby", "Rust", "R", "Go",
"T-SQL", "PL-SQL", "Typescript"]
root = Tk()
root.title("GUI на Python")
scrollbar = Scrollbar(root) # создание прокрутки
scrollbar.pack(side=RIGHT, fill=Y)
# организация прокрутки по вертикали
languages_listbox = Listbox(yscrollcommand=scrollbar.set, width=40)
for language in languages:
languages_listbox.insert(END, language)
languages_listbox.pack(side=LEFT, fill=BOTH)
scrollbar.config(command=languages_listbox.yview)
root.mainloop()
На рис. 21 представлено окно, являющееся результатом выполнения программного кода.
110
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
