Вікно повідомлень. Текстове поле
Які елементи керування вже розглянуті?
Напис (клас Label)
Кнопка (клас Button)
Які методи знаєте. Назвіть декілька?
вікно (root)
Розмір / метод .geometry(100x200),
Мінімальний і максимальний розмір/ методи .minsize(300,400) root.maxsize(700,800)
Колір тла / метод .config(bg="yellow ")
Завершити програму / метод .mainloop()
Дати назву вікна / метод .title("Моє перше програмне вікно")
Пакувальники для всіх елементів вікна:
.pack()
.place(x=a,y=b)
.grid(row=a,column=b)
кнопка(button)
.bind()
Де і як прописується обробник події (що відбувається при натисканні на кнопку)?
Після підключення модуля tkinter*
Створюється функція з відповідною назвою def......:, у якій прописані дії, які будуть відбуватися
Існують два види текстових полів або полів введення(полів повідомлення): Entry та Text. Перший дозволяє вводити текст лише в один рядок, а другий у багато рядків.:
методи:
insert
get
delete
import tkinter
def btn_click():
text_in.delete(0,END)
root=tkinter .Tk()
root.geometry("400x300")
root["bg"]="#F0E68C"
s="Вітаю, друже!"
text_in = tkinter.Entry(root,text=s,bg="red",fg="yellow", font="Arial 20")
text_in.insert(0,s)
text_in.place(x=50,y=50)
btn=tkinter.Button(root,text="change",font="Arial 20", command=btn_click)
btn.place(x=100,y=100)
root.mainloop()
Щоб створити текстове поле, створимо об'єкт text_in, який відноситься до класу Entry ,налаштовані параметри прокоментувати
text_in = Entry
Метод .insert(0,s) виводить у вікні текст змінної s="Вітаю, друже!"
Створити кнопку , яка буде очищувати поле виведення, для цього використаємо метод .delete(0,END) Він дозволяє видалити або всі елементи текстового поля , або с певного символа до певного
Створимо кнопку,налаштовані параметри прокоментувати
І прив'яжемо кнопку до функції, яка очистить поле введення при натисканні ЛКМ
Перевірили і бачимо, що так можна ввести текст, але його ще потрібно зчитати!
Як працює метод get?
Як працює метод delete?
Вказівки до самостійного завдання
Створити подію: очистити вікно root при натисканні клавіші enter реалізувати її через метод bind в параметрах, якого вкажемо функцію cancel (завдання попереднього уроку).
Оголосимо функцію cancel з аргументом event
В середині функції :
Знову налаштовуємо текст напису до початкового "Ви не ввели параметри прямокутника"
до полів a i b застосувати метод .delete(0,END) -дивись початок уроку
Замість END - введіть число
Завдання. Написати програму для обчислення периметра довільного прямокутника.
Середовище повинно мати графічний інтерфейс:
1.Напис: Ви не ввели параметри прямокутника
2. Поле введення: а=
3. Поле введення: b=
4. Кнопка, при натисканні ЛКМ, виконуються розрахунки периметра і виводяться замість старого напису: "Розрахувати"
Самостійне завдання. Дописати код, щоб при натисканні на клавішу Enter відбувалося видалення даних текстових полів для введення нових даних і відповідно текстовий напис знову став: Ви не ввели параметри прямокутника
import tkinter
root=tkinter.Tk()
root.geometry("360x200")
root["bg"]="white"
root.resizable(0,0)
root.columnconfigure(0,minsize=100)
root.columnconfigure(1,minsize=260)
root.rowconfigure(0,minsize=50)
root.rowconfigure(1,minsize=50)
root.rowconfigure(2,minsize=50)
root.rowconfigure(3,minsize=50)
root.mainloop()
Прокоментувати код
і протестувати
перевірка
Підключили модуль tkinter
Створити об'єкт вікно root класу Tk, задали колір вікна, розміри і сказали, що розміри змінити неможливо.
Ширина 1 стовпця-100, 2го-260. Ширина кожного з 4х рядків - 500.
import tkinter
root=tkinter.Tk()
root.geometry("360x200")
root["bg"]="white"
root.resizable(0,0)
message=tkinter.Label(root,text="Ви не ввели параметри прямокутника",
font="Arial 16", bg="white")
message.grid(row=0,column=0, columnspan=2)
root.columnconfigure(0,minsize=100)
root.columnconfigure(1,minsize=260)
root.rowconfigure(0,minsize=50)
root.rowconfigure(1,minsize=50)
root.rowconfigure(2,minsize=50)
root.rowconfigure(3,minsize=50)
root.mainloop()
2. Прокоментувати код, який дописали новими рядками,
і протестувати.
Перевір себе
Створили напис (message) - цей віджет відноситься до класу Label, розміщений у вікні root, у параметрі text вписують текст напису, шрифт, розмір шрифту, колір тла напису.
У вікні напис міститься у першому рядку і займає два стовпця (посередині)
import tkinter
root=tkinter..Tk()
root.geometry("360x200")
root["bg"]="white"
root.resizable(0,0)
message=tkinter.Label(root,text="Ви не ввели параметри прямокутника",
font="Arial 16", bg="white")
message.grid(row=0,column=0, columnspan=2)
text_a=tkinter.Label(root,text="a=",
font="Arial 16", bg="white")
text_a.grid(row=1,column=0,sticky="e")
text_b=tkinter.Label(root,text="b=",
font="Arial 16", bg="white")
text_b.grid(row=2,column=0,sticky="e")
root.columnconfigure(0,minsize=100)
root.columnconfigure(1,minsize=260)
root.rowconfigure(0,minsize=50)
root.rowconfigure(1,minsize=50)
root.rowconfigure(2,minsize=50)
root.rowconfigure(3,minsize=50)
root.mainloop()
3. Прокоментувати код, який дописали новими рядками,
і протестувати
перевірка
Створили ДВА написи (text_a i text_b ) - ці віджети відноситься до класу Label, розміщені у вікні root, у параметрі text вписують текст напису: а= і b= , шрифт, розмір шрифту, колір тла напису.
У вікні напис а= міститься у другому рядку і першому стовпці , sticky="e" - біля правого краю.
У вікні напис b= міститься у третьому рядку і першому стовпці , sticky="e" - біля правого краю.
import tkinter
root=tkinter.Tk()
root.geometry("360x200")
root["bg"]="white"
root.resizable(0,0)
message=tkinter.Label(root,text="Ви не ввели параметри прямокутника",
font="Arial 16", bg="white")
message.grid(row=0,column=0, columnspan=2)
text_a=tkinter.Label(root,text="a=",
font="Arial 16", bg="white")
text_a.grid(row=1,column=0,sticky="e")
text_b=tkinter.Label(root,text="b=",
font="Arial 16", bg="white")
text_b.grid(row=2,column=0,sticky="e")
but_comp=tkinter.Button(root,text="Розрахувати",
font="Arial 16", bg="light green")
but_comp.grid(row=3,column=0,columnspan=2)
but_comp.bind("<Button-1>",computer)
root.columnconfigure(0,minsize=100)
root.columnconfigure(1,minsize=260)
root.rowconfigure(0,minsize=50)
root.rowconfigure(1,minsize=50)
root.rowconfigure(2,minsize=50)
root.rowconfigure(3,minsize=50)
root.mainloop()
4. Прокоментувати код, який дописали новими рядками,
і протестувати.
Чому програма не працює?
Як тимчасово можна усунути проблему?
Як виправити помилку?
Створили кнопку but_comp, яка розміщені у вікні root, text="Розрахунки",bg="колір тла відповідна назва"
Розміщена кнопка у четвертому рядку і займає два стовпці (посередині).
До кнопки прив'язана подія: при натисканні на ЛКМ перейти до виконання функції computer (розрахунок).
При тестуванні буде - помилка, бо функцію потрібно оголосити (прописати).
Функція computer буде обчислювати периметр прямокутника і виводити результат на місці напису: Ви не ввели параметри прямокутника
Тому, тимчасово зробити цей рядок коментарем #
import tkinter
root=tkinter.Tk()
root.geometry("360x200")
root["bg"]="white"
root.resizable(0,0)
message=tkinter.Label(root,text="Ви не ввели параметри прямокутника",
font="Arial 16", bg="white")
message.grid(row=0,column=0, columnspan=2)
text_a=tkinter.Label(root,text="a=",
font="Arial 16", bg="white")
text_a.grid(row=1,column=0,sticky="e")
a=tkinter.Entry(root,font="Arial 16",
fg="blue",bg="light grey",width=15)
a.grid(row=1,column=1)
text_b=tkinter.Label(root,text="b=",
font="Arial 16", bg="white")
text_b.grid(row=2,column=0,sticky="e")
b=tkinter.Entry(root,font="Arial 16",
fg="blue",bg="light grey",width=15)
b.grid(row=2,column=1)
but_comp=Button(root,text="Розрахувати",
font="Arial 16", bg="light green")
but_comp.grid(row=3,column=0,columnspan=2)
#but_comp.bind("<Button-1>",computer)
root.columnconfigure(0,minsize=100)
root.columnconfigure(1,minsize=260)
root.rowconfigure(0,minsize=50)
root.rowconfigure(1,minsize=50)
root.rowconfigure(2,minsize=50)
root.rowconfigure(3,minsize=50)
root.mainloop()
5. Пригадати матеріал на початку уроку і прокоментувати код, який дописали новими рядками,
і протестувати.
Перевірка
Створили текстові поля a i b за допомогою класу Entry, розміщуються поля у вікні root. Налаштували шрифт, розмір шрифту, колір тла, колір букв, ширину поля.
Поле a розташовано у другому рядку, другому стовпчику - комірка.
Поле b розташовано у третьому рядку, другому стовпчику - комірка.
import tkinter
def computer(event):
p=(float(a.get())+float(b.get()))*2
message["text"]="p=(a+b)*2=("+a.get()+"+"+b.get()+")*2="+str(p)
root=tkinter.Tk()
root.geometry("360x200")
root["bg"]="white"
root.resizable(0,0)
message=tkinter.Label(root,text="Ви не ввели параметри прямокутника",
font="Arial 16", bg="white")
message.grid(row=0,column=0, columnspan=2)
text_a=tkinter.Label(root,text="a=",
font="Arial 16", bg="white")
text_a.grid(row=1,column=0,sticky="e")
a=tkinter.Entry(root,font="Arial 16",
fg="blue",bg="light grey",width=15)
a.grid(row=1,column=1)
text_b=tkinter.Label(root,text="b=",
font="Arial 16", bg="white")
text_b.grid(row=2,column=0,sticky="e")
b=tkinter.Entry(root,font="Arial 16",
fg="blue",bg="light grey",width=15)
b.grid(row=2,column=1)
but_comp=tkinter.Button(root,text="Розрахувати",
font="Arial 16", bg="light green")
but_comp.grid(row=3,column=0,columnspan=2)
but_comp.bind("<Button-1>",computer)
root.columnconfigure(0,minsize=100)
root.columnconfigure(1,minsize=260)
root.rowconfigure(0,minsize=50)
root.rowconfigure(1,minsize=50)
root.rowconfigure(2,minsize=50)
root.rowconfigure(3,minsize=50)
root.mainloop()
Пояснення
Розкоментували рядок, у якому створили подію Натискання ЛКМ, яку прив'язали до кнопки but_comp (розрахунок).
Подію реалізували через метод bind
Оголосили функцію computer з аргументом event.
Всередині функції створили змінну p
!!! сказати, що p = (a + b) * 2 не можна !!! Бо a і b - назви об'єктів. Потрібно пригадати метод, який зчитує дані з полів введення.
Дані з поля введення зчитуються через метод .get
a.get - повертає текстовий рядок, який введений у поле a
b.get - повертає текстовий рядок, який введений у поле b
Але текстовий рядок потрібно перетворити у число!!! int або float !!!
А виводиться відповідь у спосіб: змінити параметр тексту напису (завдання у попередньому уроці)
!!! Текст у напис збираємо (додаємо, конкатенація), тому щоб р перетворити у текст використали функцю str!!!