Кнопка. Напис. Поле.

 В Python кнопка - це елемент керування. Для створення кнопки використовують команду :

Ім'я кнопки = Button()

В дужках ми можемо вказувати набір властивостей цієї кнопки, таких як:

text - текст на кнопці

width - ширина кнопки

height - висота кнопки

bg - колір фону

fg - колір тексту

font - шрифт тексту (назва шрифту, розмір шрифту, накреслення)

state - стан кнопки (normal - звичайний, disable - недоступний)

Методи для розміщення кнопки:

pack() - розміщення кнопки під рядком заголовка вікна, якщо хочемо зробити кнопку з відступом, використовуємо команду:

button.pack(pady = 20), де 20 - відступ у 20 пікселів від верхньої межі вікна.

place(x = 100, y = 200) - розміщення кнопки з початком верхньої лівої межі у точці (x, y).

pack_forget(), place_forget() - зробити кнопку невидимою.

Пов'язати кнопку з обробником подій можна так само, як з вікном, використовуючи метод bind().

Приклад для події Click:

from tkinter import* def click (event): root.title('Створюємо першу кнопку') root = Tk() root.geometry('400x200+100+100') button = Button(text = 'Кнопка', width = 20, bg = 'pink') button.pack(pady = 20) button.bind('<1>', click )

Створення кнопки

Приклад показує, що під час натискання на кнопку, змінюється заголовок вікна.

Дія виконується, коли ми натискаємо лівою клавішею миші.

Інший спосіб: ми створюємо кнопку, в ній вказуємо команду клік: command = click, виклик події - це буде наша команда, але при цьому не прописуємо event:


Завдання с. 179.

Завдання 1. Створіть проект, у якому в результаті настання події Click, для кнопки її розміри стануть 40х30, і текст на кнопці зміниться на назву вашого населеного пункту.

from tkinter import* def click (event): root.title('Змінюємо розміри кнопки') button['text'] = 'Населений пункт' button['width'] = 40 button['height'] = 30 root = Tk() root.geometry('400x200+100+100') button = Button(text = 'Кнопка', width = 20, bg = 'lime') button.pack(pady = 20) button.bind('<1>', click )

Змінюємо розміри кнопки

Завдання 2. Створіть проект, у якому в результаті настання події KeyPress, для кнопки її розміри стануть 20х40, і текст на кнопці зміниться на ваше прізвище.

from tkinter import* def keypress(event): root.title('Змінюємо розміри кнопки та текст') button['text'] = 'Прізвище' button['width'] = 20 button['height'] = 40 root = Tk() root.geometry('400x200+100+100') button = Button(text = 'Кнопка', width = 20, bg = 'grey') button.pack(pady = 20) root.bind('<KeyPress>', keypress)

Змінити розміри кнопки і текст


Завдання 5. Створіть проект, у якому в результаті настання події Click, для кнопки її розміри стануть 50х5, і текст на кнопці зміниться на Мій проєкт, а в результаті настання події MouseMove для кнопки кнопка переміститься на 30 пікселів вправо та 40 пікселів униз і стане недоступною. Встановиться жовтий колір фону кнопки.

from tkinter import* def click (event): root.title('Змінюємо розміри кнопки, текст') button['text'] = 'Мій проєкт' button['width'] = 50 button['height'] = 5 def mousemove (event): button.place(x = 30, y = 40) button['bg'] = 'yellow' button['state'] = 'disable' root = Tk() root.geometry('400x200+100+100') button = Button(text = 'Кнопка', width = 20, bg = 'lime') button.pack(pady = 20) button.bind('<1>', click ) button.bind('<Motion>', mousemove )

Напис
Напис - це компонент, який використовується для виведення повідомлень.
Команда створення напису така:
Ім'я напису = Label()
В дужках ми можемо написати властивості цього напису:

bg - колір фону напису

fg - колір символів

font - вид шрифту розмір символів та наклеслення:

bold - напівжирне, italic - курсивне, underline - підкреслене

width - ширина напису

height - висота напису

Приклад:

label = Label(text = 'Напис', bg = 'lime', fg = 'blue', font = 'Arial14')


З написом, так само як із кнопкою та вікном можна пов'язати обробники подій.

Приклад:

from tkinter import* def label_click (event): label['text'] = 'Мій проєкт' label['width'] = 30 label['height'] = 5 label['font'] = 18 label['fg'] = 'green' root = Tk() root.geometry('400x200+100+100') label = Label(text = 'Напис', width = 20, fg = 'lime') label.pack(pady = 20) label.bind('<1>', label_click )

Напис


Всі властивості для напису аналогічні як для кнопки.
Розглянемо завдання на с. 187
Завдання 1. Створіть проєкт, у якому в результаті настання події Click для напису буде встановлено ширину напису 30 символів, текст у написі зміниться на назву вулиці, на якому розміщений ваш заклад освіти.

from tkinter import* def label_click (event): label['text'] = 'Вулиця, на якій розміщено заклад освіти' label['width'] = 30 root = Tk() root.geometry('400x200+100+100') label = Label(text = 'Напис') label.pack(pady = 20) label.bind('<1>', label_click )

Завдання 2. Створіть проєкт, у якому в результаті настання події DblClick для напису буде встановлено висоту напису 5 символів і текст у написі зміниться на ваше ім'я.

from tkinter import* def label_dblclick (event): label['text'] = 'Ім"я' label['height'] = 5 root = Tk() root.geometry('400x200+100+100') label = Label(text = 'Напис') label.pack(pady = 20) label.bind('<Double-1>', label_dblclick )

Завдання 3. Створіть проєкт, у якому в результаті настання події MouseMove для напису буде встановлено новий текст на ньому, червоний колір тексту, і збільшиться ширина напису на 5 символів.

from tkinter import* def label_mousemove(event): label['text'] = 'Змінено' label['fg'] = 'red' label['width'] = 45 root = Tk() root.geometry('400x200+100+100') label = Label(text = 'Напис', width = 40, height = 40, font = 20) label.pack(pady = 20) label.bind('<Motion>', label_mousemove)
Напис змінено текст

Завдання 4. Створіть проєкт, у якому в результаті настання події Click для напису буде встановлено зменшення ширини на 2 символи, розмір символів 12, колір символів синій, і виведеться в напис назва вашого закладу освіти.

from tkinter import* def label_click(event): label['text'] = 'Назва закладу освіти' label['fg'] = 'blue' label['width'] = 38 root = Tk() root.geometry('400x200+100+100') label = Label(text = 'Напис', width = 40, height = 40, font = 12) label.pack(pady = 20) label.bind('<1>', label_click)
Зміна розміру та кольору напису
Завдання 5. Створіть проєкт, у якому в результаті настання події Click для напису буде встановлено коричневий колір фону, і текст зміниться на Мій проєкт, а в результаті настання події MouseMove збільшиться ширина і
висота на 3 символи.

from tkinter import* def label_click(event): label['text'] = 'Мій проєкт' label['bg'] = 'brown' def label_mousemove(event): label['width'] = 23 label['height'] = 23 root = Tk() root.geometry('400x200+100+100') label = Label(text = 'Напис', width = 20, height = 20, font = 15, bg = 'pink') label.pack(pady = 20) label.bind('<1>', label_click) label.bind('<Motion>', label_mousemove)

Зміна кольору фону, назви напису

Завдання 6. Створіть проєкт, у якому в результаті настання події Click для кнопки ширина напису зменшиться на 2 символи, висота збільшиться на 3 символи, у напис буде виведено ваше прізвище та ім'я зеленим кольором на сірому фоні.
from tkinter import* def button_click(event): label['width'] = 28 label['height'] = 32 label['text'] = 'Прізвище Ім"я' label['bg'] = 'grey' label['fg'] = 'green' root = Tk() root.geometry('400x200+100+100') button = Button(text = 'Натисни, щоб змінити напис') label = Label(text = 'Напис', width = 30, height = 30, font = 15, bg = 'pink') button.pack(pady = 20) label.pack(pady = 20) button.bind('<1>', button_click)
Зміна напису за допомогою кнопки

Завдання 7. Створіть проєкт, у якому в результаті настання події Click для кнопки вікно проєкту переміститься на 60 пікселів уліво і на 80 пікселів униз і в напис виведеться назва вашого закладу освіти синім кольором на жовтому фоні.
from tkinter import*
def button_click(event):
    t = root.winfo_x() + 60
    w = root.winfo_y() + 80
    root.geometry('400x200+{}+{}'.format(t,w))
    label['text'] = 'Заклад освіти'
    label['bg'] = 'yellow'
    label['fg'] = 'blue' 
root = Tk()
root.geometry('400x200+100+100')
button = Button(text = 'Натисни, щоб змінити напис')
label = Label(text = 'Напис', width = 30, height = 30, font = 15, bg = 'pink')
button.pack(pady = 20)
label.pack(pady = 20)
button.bind('<1>', button_click)
Зміна напису за допомогою кнопки

Завдання 8. Створіть проєкт, у якому у вікні розташуйте два написи Моя країна та Україна. Установіть заголовок вікна Україна. Після настання події Click з першим написом колір фону першого напису повинен стати синім, другого напису жовтим. Після настання події Click з другим написом колір символів першого напису повинен стати жовтим, другого напису синім, шрифт в обох написах - Arial 14, напівжирний.

а) вікно після запуску
б) після настання події клік першого напису
в) після настання події клік другого напису

from tkinter import*
def label_click(event):
    label['bg'] = 'blue'
    label2['bg'] = 'yellow'
def label2_click(event):
    label['fg'] = 'yellow'
    label2['fg'] = 'blue' 
root = Tk()
root.geometry('240x240+100+100')
root.title('Україна')
label = Label(text = 'Моя країна', width=20, height=5, font='Arial 14 bold')
label2 = Label(text = 'Україна', width=20, height=5, font='Arial 14 bold')
label.pack(pady = 0)
label2.pack(pady = 0)
label.bind('<1>', label_click)
label2.bind('<1>', label2_click)

Проект моя країна Україна


Завдання 9. Створіть проект, в якому розташуйте у вікні два написи Ніч та День, задайте заголовок вікна Світло. Після запуску проекту колір фону вікна чорний, колір фону першого напису світло-сірий, другий напис не відображається. Після настання події Click з першим написом колір фону вікна стає білим, перший напис зникає, другий напис відображається на світло-сірому фоні. Після настання події Click з другим написом вікно проєкту повертається до початкового стану.

а) початковий стан після настання події клік для другого напису б) після настання події клік для першого напису

from tkinter import*
def label_click(event):
    root['bg'] = 'white'
    label['text'] = 'День'
    label.place(x = 100, y =130)
root = Tk()
root.geometry('240x200+100+100')
root.title('Світло')
root['bg'] = 'black'
label = Label(text = 'Ніч', bg = 'grey', width=5, font='Arial 14')
label.pack(pady = 20)
label.bind('<1>', label_click)

Поле
Поле - це компонент, який використовується для введення даних або виведення результатів.
Команда для створення поля:
Ім'я поля = Entry()
В дужках можна вказати властивості цього поля такі, як:
width - ширина поля
bg -колір фону поля
fg - колір символів поля
font - шрифт
Ці всі властивості аналогічні до властивостей кнопки та напису, лише властивість height - висота, відсутня.Висота поля визначається розміром шрифту. Для поля можна задати товщину рамки поля - bd.
Для розміщення поля у вікні використовуються методи pack і place, аналогічно до кнопки та напису.
Приклад:
entry = Entry(width = 15, bg = 'pink', fg = 'blue', font = 'Arial 20', bd =3)
Щоб вивести в поле текст, використовують команду:
Ім'я поля.insert(позиція, текст)
Початкова позиція 0, позиція END - в кінці вмісту поля (якщо в полі вже щось присутнє), позиція 20 - через 20 символів.
Наприклад: entry.insert(10, 'Моя країна')
Якщо ми хочемо побачити, який вміст поля, використовують команду get().
label['text'] = entry.get() - в напис вивести текст, що введено в поле.
entry.delete(0, END) - очищення поля.
entry.focus_set() - встановлення курсора в середину поля.
Обробники подій застосовуються аналогічно, як до кнопки і напису.
Для введення даних використовують поле, а для виведення даних можна використовувати поле, напис, вікно повідомлень.
Виконаємо проект Калькулятор:

from tkinter import* def click1(): x = float(entry1.get()) y = float(entry2.get()) c = x+y label1['text'] = str(c) def click2(): x = float(entry1.get()) y = float(entry2.get()) d = x-y label2['text'] = str(d) def click3(): x = float(entry1.get()) y = float(entry2.get()) m = x*y label3['text'] = str(m) def click4(): x = float(entry1.get()) y = float(entry2.get()) n = x/y label4['text'] = str(n) root = Tk() root.geometry('300x600+100+100') root.title('Калькулятор') root['bg'] = 'pink' entry1 = Entry(width=10,font='Arial 18') entry1.pack(pady = 10) entry2 = Entry(width=10,font='Arial 18') entry2.pack(pady = 10) label1 = Label(width=10, font='Arial 16', bg='pink') label1.pack(pady = 10) button1 = Button(text='Сума',width=10,font='Arial 16',bg='grey',command=click1) button1.pack(pady = 10) label2 = Label(width=10, font='Arial 16', bg='pink') label2.pack(pady = 10) button2 = Button(text='Різниця',width=10,font='Arial 16',bg='grey',command=click2) button2.pack(pady = 10) label3 = Label(width=10, font='Arial 16', bg='pink') label3.pack(pady = 10) button3 = Button(text='Добуток',width=10,font='Arial 16',bg='grey',command=click3) button3.pack(pady = 10) label4 = Label(width=10, font='Arial 16', bg='pink') label4.pack(pady = 10) button4 = Button(text='Частка',width=10,font='Arial 16',bg='grey',command=click4) button4.pack(pady = 10)

Калькулятор Python


ІІ варіант:
from tkinter import * def click1 (): x = float(entry1.get()) y = float(entry2.get() ) z = x + y label['text'] = str(z) def click2 (): x = float(entry1.get()) y = float(entry2.get() ) z = x - y label['text'] = str(z) def click3 (): x = float(entry1.get()) y = float(entry2.get() ) z = x * y label['text'] = str(z) def click4 (): x = float(entry1.get()) y = float(entry2.get() ) z = x / y label['text'] = str(z) root = Tk () root.geometry ("300x400") entry1 = Entry () entry1.pack(pady = 10) entry2 = Entry () entry2.pack (pady = 10) label = Label () label. pack (pady = 10) button1 = Button (text='Сума', command=click1) button1. pack(pady = 10) button2 = Button (text='Різниця', command=click2) button2. pack(pady = 10) button3 = Button (text='Добуток', command=click3) button3. pack(pady = 10) button4 = Button (text='Частка', command=click4) button4. pack(pady = 10)

Завдання с. 201.
Завдання 1. Створіть проект, у якому в результаті настання події Click , буде встановлено ширину поля 15 символів, і змінено текст у полі на Інформатика.

from tkinter import* def click(event): entry['width'] = 15 entry.insert(0,'Інформатика') root = Tk() root.geometry('300x200+100+100') root.title('Зміна ширини поля та вставка тексту') entry = Entry(width=10, font='Arial 18') entry.pack(pady = 10) entry.bind('<1>', click)
Зміна ширини та тексту в полі

Завдання 2. Створіть проект, у якому в результаті настання події KeyPress для поля буде змінено товщину рамки поля 3 пікселя, і змінено текст у ньому на ваше ім'я.

from tkinter import* def keypress(event): entry['bd'] = 3 entry.insert(0, 'Ім"я') root = Tk() root.geometry('400x100+100+100') root.title('Товщина рамки') entry = Entry(width=10, font='Arial 18') entry.pack(pady = 10) entry.bind('<KeyPress>', keypress)
Товщина рамки поля
Завдання 3. Створіть проект, у якому в результаті настання події MouseMove для поля буде змінено текст у ньому, встановлено червоний колір тексту, сірий колір фону, ширину поля збільшиться на 15 символів.

from tkinter import* def mousemove(event): entry['width'] = 25 entry['bg'] = 'grey' entry['fg'] = 'red' entry.insert(0,'Україна') root = Tk() root.geometry('400x100+100+100') root.title('Поле сірого кольору') entry = Entry(width=10, font='Arial 18') entry.pack(pady = 10) entry.bind('<Motion>', mousemove)


Завдання 4. Створіть проект, у якому в результаті настання події DblClick для поля воно переміститься на 80 пікселів управо і на 20 пікселів уверх, товщина рамки поля збільшиться на 5 пікселів, виведеться в поле ваше прізвище та ім'я зеленим кольором на жовтому тлі.

from tkinter import* def dblclick(event): entry['bd'] = 5 entry.insert(0,'Прізвище ім"я') entry['bg'] = 'yellow' entry['fg'] = 'green' entry.place(x = 180, y = 80) root = Tk() root.geometry('400x200+100+100') root.title('Переміщення поля') entry = Entry(width=15, font='Arial 18') entry.place(x = 100, y = 100) entry.bind('<Double-1>', dblclick)

Переміщення поля


Завдання 5. Створіть проект, у якому поля зафарбується в сірий колір, переміститься на 50 пікселів управо і стане недоступним, якщо під час виконання проєкту виправляється текст у ньому.

from tkinter import*
def keypress(event):
    entry.insert(0,'Прізвище ім"я')
    entry['bg'] = 'grey'
    entry.place(x = 150, y = 100)
    entry['state'] = 'disable'
root = Tk()
root.geometry('400x200+100+100')
root.title('Переміщення поля')
entry = Entry(width=15, font='Arial 18')
entry.place(x = 100, y = 100)
entry.bind('<KeyPress>', keypress)

Поле стає недоступним

Практична робота № 10

Задача 1. Створіть проект з використанням поля та кнопки. Установіть такі значення властивостей поля.
Ширина - 15 символів
Товщина рамки - 3 пікселі
Текст у полі - Назва вашого класу
Створіть обробник події Click для кнопки, виконання якого встановить червоний колір фону поля, шрифт символів Arial, розмір символів 14, збільшить ширину поля на 6 символів, встановить колір тексту білий і виведе в поле текст "Ми використовуємо властивості поля!"


Коментарі