Приклад:
Змінимо текст та колір тла напису:
lab.config(bg = 'red')
lab ['text '] = 'Новий рядок'
Напис . Конструктор (клас) Label
Кнопка Конструктор (клас) Button
Текстове поле (поле введення). Конструктор (клас) Entry
вікно (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
Методи Text
Незважаючи на те, що назви методів такі ж, як ті, що використовуються в Entry, процес реалізації дещо відрізняється.
За замовчуванням текстові поля набагато більше, ніж однорядні текстові віджети Entry
Індекси в віджетах Text діють інакше, ніж у віджетах Entry. Оскільки віджети Text можуть отримувати кілька рядків тексту, індекс повинен містити такі два пункти: → Номер рядка, де розташований символ; → Розташування символу в рядку.
"1.0" 1 й символ у першому рядку
"2.3" 4 й символ у другому рядку
Методи Entry
• Метод get() дозволяє отримати значення, що міститься в текстовому полі.
Отримати значення з поля об’єкта entry1 класу Entry і присвоїти його змінній а цілого типу можна так:
a = int(entry1.get())
• Метод insert(index, str) виводить у текстове поле рядок, починаючи зі знакомісця з номером index.
Виведемо до поля об’єкта entry1 класу Entry значення змінної х:
entry1.insert(0, х)
• Метод delete(first, last) вилучає символи, починаючи зі знакомісця з номером first, до знакомісця з номером last (нумерація символів починається із 0). Щоб вилучити весь текст, як другий параметр потрібно указати END. Бажано перед викликом методу insert() викликати метод delete(), тобто перед виведенням очищувати текстове поле.
from tkinter import*
root=Tk()
root.geometry("800x300")
root["bg"]="#F0E68C"
text= Text(root, font="Arial 16")
text.insert("1.0"," Моя Батьківщина -")
text.insert("1.19"," Україна!!!!!!")
#text.delete("1.27","1.33")
text.place(x=50,y=50)
root.mainloop()
from tkinter import*
def btn_click():
text.delete(0,END)
root=Tk()
root.geometry("400x300")
root["bg"]="#F0E68C"
s="Вітаю, друже!"
text= Entry(root,text=s,bg="red",fg="yellow", font="Arial 20")
text.insert(0,s)
text.place(x=50,y=50)
btn=Button(root,text="change",font="Arial 20", command=btn_click)
btn.place(x=100,y=100)
root.mainloop()
Щоб текстове поле, створимо об'єкт text, який відноситься до класу Entry
Метод .insert(0,s) виводить у вікні текст змінної s="Вітаю, друже!"
Створити кнопку , яка буде очищувати поле виведення, для цього використаємо метод .delete(0,END)
І прив'яжемо кнопку до функції, яка очистить поле введення при натисканні ЛКМ
Перевірили і бачимо, що так можна ввести текст, але його ще потрібно зчитати!
Завдання. Написати програму для обчислення периметра довільного прямокутника.
Середовище повинно мати графічний інтерфейс:
1.Напис: Ви не ввели параметри прямокутника
2. Поле введення: а=
3. Поле введення: b=
4. Кнопка, при натисканні ЛКМ, виконуються розрахунки периметра і виводяться замість старого напису: "Розрахувати"
Дописати код, щоб після отримання відповіді, відбувалося видалення даних текстових полів для введення нових даних і відповідно текстовий напис знову став: Введіть нові параметри прямокутника.
from tkinter import*
--------------------
root=Tk()
root.geometry("360x250")
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.rowconfigure(4,minsize=50)
root.mainloop()
1.Прокоментувати код
і протестувати
Підключили модуль tkinter
Створити об'єкт вікно root класу Tk, задали колір вікна, розміри і сказали, що розміри змінити неможливо.
Ширина 1 стовпця-100, 2го-260. Ширина кожного з 4х рядків - 50.
from tkinter import*
--------------------
root=Tk()
root.geometry("360x200")
root["bg"]="white"
root.resizable(0,0)
--------------------
message1=Label(root,text="Ви не ввели параметри прямокутника",
font="Arial 14", bg="white")
message1.grid(row=0,column=0, columnspan=2)
message2=Label(root,font="Arial 14", bg="white")
message2.grid(row=4,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.rowconfigure(4,minsize=50)
root.mainloop()
2. Прокоментувати код, який дописали новими рядками,
і протестувати.
Створили напис (message) - цей віджет відноситься до класу Label, розміщений у вікні root, у параметрі text вписують текст напису, шрифт, розмір шрифту, колір тла напису.
У вікні напис міститься у першому рядку і займає два стовпця (посередині)
from tkinter import*
--------------------
root=Tk()
root.geometry("360x200")
root["bg"]="white"
root.resizable(0,0)
--------------------
message1=Label(root,text="Ви не ввели параметри прямокутника",
font="Arial 14", bg="white")
message1.grid(row=0,column=0, columnspan=2)
message2=Label(root,font="Arial 14", bg="white")
message2.grid(row=4,column=0, columnspan=2)
--------------------
text_a=Label(root,text="a=",font="Arial 16", bg="white")
text_a.grid(row=1,column=0,sticky="e")
a=Entry(root,font="Arial 16",
fg="blue",bg="light grey",width=15)
a.grid(row=1,column=1)
text_b=Label(root,text="b=",font="Arial 16", bg="white")
text_b.grid(row=2,column=0,sticky="e")
b=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.rowconfigure(4,minsize=50)
root.mainloop()
3. Прокоментувати код, який дописали новими рядками,
і протестувати
Створили ДВА написи (text_a i text_b ) - ці віджети відноситься до класу Label, розміщені у вікні root, у параметрі text вписують текст напису: а= і b= , шрифт, розмір шрифту, колір тла напису.
У вікні напис а= міститься у другому рядку і першому стовпці , sticky="e" - біля правого краю.
У вікні напис b= міститься у третьому рядку і першому стовпці , sticky="e" - біля правого краю.
from tkinter import*
--------------------
def computer(event):
p=(float(a.get())+float(b.get()))*2
message1["text"]="p=(a+b)*2=("+a.get()+"+"+b.get()+")*2="+str(p)
a.delete(0,END)
b.delete(0,END)
message2["text"]="Введіть нові параметри прямокутника"
--------------------
root=Tk()
root.geometry("360x200")
root["bg"]="white"
root.resizable(0,0)
--------------------
message1=Label(root,text="Ви не ввели параметри прямокутника",
font="Arial 14", bg="white")
message1.grid(row=0,column=0, columnspan=2)
message2=Label(root,font="Arial 14", bg="white")
message2.grid(row=4,column=0, columnspan=2)
--------------------
text_a=Label(root,text="a=",font="Arial 16", bg="white")
text_a.grid(row=1,column=0,sticky="e")
a=Entry(root,font="Arial 16",
fg="blue",bg="light grey",width=15)
a.grid(row=1,column=1)
text_b=Label(root,text="b=",font="Arial 16", bg="white")
text_b.grid(row=2,column=0,sticky="e")
b=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.rowconfigure(4,minsize=50)
root.mainloop()
4. Прокоментувати код, який дописали новими рядками,
і протестувати.
Чому програма не працює?
Як тимчасово можна усунути проблему?
Як виправити помилку?
Тому, тимчасово зробити цей рядок коментарем #
5. Пригадати матеріал на початку уроку і прокоментувати код, який дописали новими рядками,
і протестувати.
Створили текстові поля a i b за допомогою класу Entry, розміщуються поля у вікні root. Налаштували шрифт, розмір шрифту, колір тла, колір букв, ширину поля.
Поле a розташовано у другому рядку, другому стовпчику - комірка.
Поле b розташовано у третьому рядку, другому стовпчику - комірка.
Розкоментували рядок, у якому створили подію Натискання ЛКМ, яку прив'язали до кнопки but_comp (розрахунок).
Подію реалізували через метод bind
Оголосили функцію computer з аргументом event.
Всередині функції створили змінну p
!!! сказати, що p = (a + b) * 2 не можна !!! Бо a і b - назви об'єктів. Потрібно пригадати метод, який зчитує дані з полів введення.
Дані з поля введення зчитуються через метод .get
a.get - повертає текстовий рядок, який введений у поле a
b.get - повертає текстовий рядок, який введений у поле b
Але текстовий рядок потрібно перетворити у число!!! int або float !!!
А виводиться відповідь у спосіб: змінити параметр тексту напису (завдання у попередньому уроці)
!!! Текст у напис збираємо (додаємо, конкатенація), тому щоб р перетворити у текст використали функцю str!!!
from tkinter import*
def computer(event):
p=(float(a.get())+float(b.get()))*2
message1["text"]="p=(a+b)*2=("+a.get()+"+"+b.get()+")*2="+str(p)
a.delete(0,END)
b.delete(0,END)
message2["text"]="Введіть нові параметри прямокутника"
root=Tk()
root.geometry("360x250")
root["bg"]="white"
root.resizable(0,0)
message1=Label(root,text="Ви не ввели параметри прямокутника",
font="Arial 14", bg="white")
message1.grid(row=0,column=0, columnspan=2)
message2=Label(root,font="Arial 14", bg="white")
message2.grid(row=4,column=0, columnspan=2)
text_a=Label(root,text="a=",font="Arial 16", bg="white")
text_a.grid(row=1,column=0,sticky="e")
a=Entry(root,font="Arial 16",
fg="blue",bg="light grey",width=15)
a.grid(row=1,column=1)
text_b=Label(root,text="b=",font="Arial 16", bg="white")
text_b.grid(row=2,column=0,sticky="e")
b=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.rowconfigure(4,minsize=50)
root.mainloop()