☰ Содержание · Информатика

Графический интерфейс: tkinter

Уроки 53–54 · 2 урока · М. Р. Файзиева, Д. М. Сайфуров, Н. С. Хайтуллаева. Информатика и информационные технологии, 9 класс. «Nashriyot uyi Tasvir», Ташкент, 2020
54

Практическое занятие: графическое приложение

Учебник: с. 107
ЦельНа практическом занятии создаёт небольшие приложения с tkinter: кнопку случайного числа и окно, складывающее два числа, и проверяет набранный текст.
Новые слова
Entry.get(): возвращает текст, набранный в поле, в виде строки · Entry.get()config(text=…): изменяет текст метки · config(text=…)isdigit(): True, если строка состоит только из цифр · isdigit()событие: действие пользователя, например нажатие кнопки · voqea
Объяснение

Программа с GUI реагирует на события: пользователь нажимает кнопку, и выполняется соответствующая функция. В окне кубика кнопка вызывает random.randint(1, 6) и записывает результат в метку. В окне сложения есть два поля Entry, а функция берёт их текст с помощью get(). Пользователь может набрать буквы вместо чисел, поэтому сначала мы проверяем с помощью a.isdigit() и b.isdigit(), что текст состоит только из цифр; без проверки int("abc") даёт ValueError, и приложение прекращает работу. В зависимости от результата проверки метка показывает либо сумму, либо сообщение «Son kiriting». При создании приложения не запрашивайте настоящие личные данные (пароль, адрес, номер телефона): в учебном приложении должны быть только числа и обычный текст. Перед запуском приложения проверьте место каждого виджета в сетке, иначе они могут оказаться друг на друге.

Примеры
Бросок кубика: import tkinter as tk ⏎ import random ⏎ def tashla(): ⏎     natija.config(text=str(random.randint(1, 6))) ⏎ oyna = tk.Tk() ⏎ oyna.title("Kubik") ⏎ natija = tk.Label(oyna, text="") ⏎ natija.grid(row=0, column=0) ⏎ tugma = tk.Button(oyna, text="Tashla", command=tashla) ⏎ tugma.grid(row=1, column=0) ⏎ oyna.mainloop() При нажатии кнопки в метке появляется одно число от 1 до 6.
Сложение двух чисел: import tkinter as tk ⏎ def qosh(): ⏎     a = maydon1.get() ⏎     b = maydon2.get() ⏎     if a.isdigit() and b.isdigit(): ⏎         natija.config(text=str(int(a) + int(b))) ⏎     else: ⏎         natija.config(text="Son kiriting") ⏎ oyna = tk.Tk() ⏎ oyna.title("Qo‘shish") ⏎ maydon1 = tk.Entry(oyna, width=8) ⏎ maydon1.grid(row=0, column=0) ⏎ maydon2 = tk.Entry(oyna, width=8) ⏎ maydon2.grid(row=0, column=1) ⏎ tugma = tk.Button(oyna, text="Qo‘sh", command=qosh) ⏎ tugma.grid(row=1, column=0) ⏎ natija = tk.Label(oyna, text="") ⏎ natija.grid(row=1, column=1) ⏎ oyna.mainloop() Если набрать 7 и 5, метка покажет 12; если в полях набрать буквы, метка покажет Son kiriting.
Работа в классе

«Тестировщик приложений»: пары передают друг другу свои приложения; тестировщик вводит в поля правильные и неправильные данные (число, буквы, пусто) и записывает в таблицу, как реагирует приложение.

Упражнения
1
Какие значения могут появиться в метке в приложении с кубиком?
2
Напишите функцию, которая показывает в метке произведение чисел из двух полей Entry (35 для 7 и 5).
3
Чему равны "12a".isdigit() и "125".isdigit()?
4
Почему набранный текст нужно проверить, прежде чем передавать его в int()?