Уроки 53–54 · 2 урока · М. Р. Файзиева, Д. М. Сайфуров, Н. С. Хайтуллаева. Информатика и информационные технологии, 9 класс. «Nashriyot uyi Tasvir», Ташкент, 2020
53
Графический интерфейс пользователя в Python
Учебник: с. 104–106
ЦельЗнает понятия графического интерфейса пользователя (GUI) и виджета, создаёт окно, метку, поле ввода и кнопку с помощью модуля tkinter и делает так, чтобы при нажатии кнопки выполнялась функция.
Новые слова
GUI: графический интерфейс пользователя, состоящий из окон, кнопок и полей · GUIвиджет: один элемент интерфейса, например Label, Entry или Button · vijetmainloop(): показывает окно и ждёт действий пользователя · mainloop()grid(): размещает виджет в ячейке сетки по строке и столбцу · grid()
Объяснение
До сих пор мы общались с программой через текст; у многих программ есть графический интерфейс из окон, кнопок и текстовых полей. Модуль tkinter, поставляемый с Python, создаёт такие окна (в некоторых системах его может понадобиться добавить отдельно). Порядок такой: import tkinter as tk; главное окно создаётся командой oyna = tk.Tk(); oyna.title() и oyna.geometry("250x100") задают заголовок и размер; создаются виджеты: tk.Label – текстовая метка, tk.Entry – поле ввода текста, tk.Button – кнопка; мы помещаем их в ячейки сетки с помощью grid(row=…, column=…); наконец, oyna.mainloop() открывает окно и ждёт действий пользователя. Функция, которая выполняется при нажатии кнопки, задаётся с помощью command= и записывается без скобок: command=salom; если записать со скобками, функция выполнится сразу, без нажатия кнопки. Текст в Entry берётся с помощью get() и является строкой; если нужно число, его преобразуют с помощью int(). Текст метки изменяется с помощью config(text=…).
Примеры
Окно приветствия: import tkinter as tk ⏎ def salom(): ⏎ yorliq.config(text="Salom!") ⏎ oyna = tk.Tk() ⏎ oyna.title("Mening ilovam") ⏎ oyna.geometry("250x100") ⏎ yorliq = tk.Label(oyna, text="") ⏎ yorliq.grid(row=0, column=0) ⏎ tugma = tk.Button(oyna, text="Bos", command=salom) ⏎ tugma.grid(row=1, column=0) ⏎ oyna.mainloop() У окна заголовок «Mening ilovam», а при нажатии кнопки в метке появляется текст Salom!.
Удвоение: import tkinter as tk ⏎ def ikki(): ⏎ n = int(maydon.get()) ⏎ natija.config(text=str(n * 2)) ⏎ oyna = tk.Tk() ⏎ oyna.title("Ikkilantirish") ⏎ maydon = tk.Entry(oyna, width=10) ⏎ maydon.grid(row=0, column=0) ⏎ tugma = tk.Button(oyna, text="x 2", command=ikki) ⏎ tugma.grid(row=0, column=1) ⏎ natija = tk.Label(oyna, text="") ⏎ natija.grid(row=1, column=0) ⏎ oyna.mainloop() Если в поле набрать 21 и нажать кнопку, в метке появится 42, потому что get() даёт строку, а int() превращает её в число.
Работа в классе
«Спроектируй окно на бумаге»: группа рисует окно на бумаге (метка, поле, кнопка) и отмечает их места в сетке (строка, столбец); другая группа пишет код по этому рисунку.
Упражнения
1
Какая команда открывает окно и ждёт действий пользователя?
oyna.mainloop()
2
Создайте окно с заголовком «Salom oyna» и меткой «Xush kelibsiz».