Вікно повідомлень. Текстове поле

Які елементи керування вже розглянуті?

Які методи знаєте. Назвіть декілька?

Де і як прописується обробник події (що відбувається при натисканні на кнопку)?

Існують два види текстових полів або полів введення(полів повідомлення): 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

В середині функції :

Замість  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!!!