4.4. Поле. Проєкти з вхідними даними та результатами

Назад до змісту

Дайте відповіді на запитання

1. Для чого може використовуватися поле?

Поле (Entry) — це елемент керування, який переважно використовується для введення даних користувачем, але його також можна застосовувати для виведення результатів.

2. Як створити поле і розмістити його у вікні?

Щоб створити та розмістити поле, потрібно виконати такі кроки:

  1. Створити об’єкт типу Entry і пов’язати його зі змінною, наприклад: моє_поле = Entry().
  2. За бажанням встановити властивості поля при його створенні: моє_поле = Entry(width=20, font='Arial 14').
  3. Розмістити поле у вікні за допомогою одного з методів, наприклад pack() або place(): моє_поле.pack().

3. Які властивості поля ви знаєте? Схарактеризуйте їх.

Основні властивості поля :.

  • width: ширина поля в символах.
  • bg: колір фону поля.
  • fg: колір тексту в полі.
  • font: шрифт, його розмір і стиль для тексту в полі.
  • bd: товщина рамки навколо поля.

4. Як задати значення властивості поля в команді його створення?

Значення властивостей задаються безпосередньо в дужках під час створення об’єкта Entry як пари <властивість> = <значення>, перелічені через кому. Наприклад: поле2 = Entry(width=15, bg='yellow', fg='green').

5. Як змінити значення властивості поля в ході виконання проєкту?

Значення властивостей поля можна змінювати в обробниках подій. Наприклад, щоб змінити колір фону та тексту після кліку, можна використати команди, які змінюють колір фону на жовтий, а колір символів на червоний.

6. Як отримати значення з поля; записати в поле; видалити дані з поля?

  • Отримати значення: за допомогою методу get(). Наприклад: змінна = назва_поля.get().
  • Записати в поле: за допомогою методу insert(), вказавши позицію та текст. Наприклад: назва_поля.insert(0, 'текст для вставки').
  • Видалити дані: за допомогою методу delete(), вказавши початкову та кінцеву позиції. Щоб очистити все поле: назва_поля.delete(0, END).

7. Якими командами можна перевести текстове подання числа безпосередньо в число і навпаки?

  • Для перетворення тексту на число використовують функції int() (для цілих чисел) та float() (для дробових чисел). Наприклад: число = int(назва_поля.get()).
  • Для перетворення числа на текст (рядок) використовують функцію str(). Наприклад: label['text'] = str(змінна_з_числом).

8. Чим константа відрізняється від змінної?

Константа — це величина, значення якої не змінюється протягом усього виконання проєкту. На відміну від неї, значення змінної може змінюватися багато разів. У мові програмування Python імена констант прийнято записувати великими літерами, наприклад, PI = 3.14159.

Обговоріть і зробіть висновки

1. Чим відрізняються команди виведення в напис і в поле?

Команди виведення відрізняються синтаксисом і принципом роботи. Щоб вивести текст у напис, потрібно змінити значення його властивості text, наприклад: напис['text'] = 'новий текст'. Для виведення в поле використовується метод insert(), який вставляє текст у вказану позицію, наприклад: поле.insert(0, 'новий текст').

2. Чим відрізняються команди виведення в поле й у вікно повідомлень?

Виведення в поле (insert) додає текст до існуючого елемента у головному вікні, і цей текст користувач може редагувати. Виведення у вікно повідомлень (наприклад, за допомогою showinfo()) створює нове тимчасове вікно, яке з’являється поверх основного для показу інформації та закривається після натискання кнопки.

Виконайте завдання

1. Створіть проєкт, у якому в результаті настання події Click для поля буде встановлено ширину поля 15 символів і виведено текст у поле «Інформатика» синім кольором на жовтому фоні. Початкові значення властивостей поля залиште за замовчуванням. Збережіть проєкт у вашій папці у файлі з іменем завдання 4.4.1.

# завдання 4.4.1
from tkinter import *

def on_click(event):
    field.config(width=15, bg='yellow', fg='blue')
    field.delete(0, END)
    field.insert(0, 'Інформатика')

root = Tk()
root.title('Завдання 4.4.1')

field = Entry(root)
field.pack(pady=20, padx=20)

field.bind('<Button-1>', on_click) # <Button-1> це клік лівою кнопкою миші

root.mainloop()

2. Створіть проєкт, у якому в результаті настання події DoubleClick для поля буде встановлено товщину рамки поля 3 пікселі і змінено текст у полі на ваше ім’я синім кольором. Початкові значення властивостей поля виберіть самостійно. Збережіть проєкт у вашій папці у файлі з іменем завдання 4.4.2.

# завдання 4.4.2
from tkinter import *

def on_double_click(event):
    field.config(bd=3, fg='blue')
    field.delete(0, END)
    field.insert(0, "Моє ім'я") # Замість "Моє ім'я" впиши своє

root = Tk()
root.title('Завдання 4.4.2')

field = Entry(root, width=25, font='Arial 14', justify=CENTER)
field.insert(0, 'Двічі клацни по мені')
field.pack(pady=20, padx=20)

field.bind('<Double-Button-1>', on_double_click)

root.mainloop()

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

# завдання 4.4.3
from tkinter import *

def on_mouse_move(event):
    current_width = field.cget('width')
    field.config(width=current_width + 5, bg='grey', fg='red')
    field.delete(0, END)
    field.insert(0, 'Миша рухається!')
    # Щоб подія не спрацьовувала постійно, її можна відв'язати
    field.unbind('<Motion>')

root = Tk()
root.title('Завдання 4.4.3')

field = Entry(root, width=20, font='Calibri 12')
field.pack(pady=20, padx=20)
field.insert(0, 'Наведи сюди мишу')

field.bind('<Motion>', on_mouse_move) # <Motion> це рух миші над віджетом

root.mainloop()

4. Створіть математичну модель і проєкт для обчислення значення виразу (2a + b)(a – b).

  • Математична модель:
    • Вхідні дані: два числа a і b.
    • Результат: число z.
    • Формула: $z = (2 \cdot a + b) \cdot (a – b)$
# завдання 4.4.4
from tkinter import *

def calculate(event):
    a = float(entry_a.get())
    b = float(entry_b.get())
    result = (2 * a + b) * (a - b)
    label_result['text'] = f'Результат: {result}'

root = Tk()
root.title('Завдання 4.4.4')

Label(root, text='Введіть a:').pack()
entry_a = Entry(root)
entry_a.pack()

Label(root, text='Введіть b:').pack()
entry_b = Entry(root)
entry_b.pack()

button = Button(root, text='Обчислити')
button.pack()
button.bind('<Button-1>', calculate)

label_result = Label(root, text='Результат:')
label_result.pack()

root.mainloop()

5. Створіть математичну модель і проєкт для обчислення значення виразу (3a – b)(a + 2*b).

Математична модель:

  • Вхідні дані: два числа a і b.
  • Результат: число z.
  • Формула: $z = (3 \cdot a – b) \cdot (a + 2 \cdot b)$
# завдання 4.4.5
from tkinter import *

def calculate(event):
    a = float(entry_a.get())
    b = float(entry_b.get())
    result = (3 * a - b) * (a + 2 * b)
    label_result['text'] = f'Результат: {result}'

root = Tk()
root.title('Завдання 4.4.5')

Label(root, text='Введіть a:').pack()
entry_a = Entry(root)
entry_a.pack()

Label(root, text='Введіть b:').pack()
entry_b = Entry(root)
entry_b.pack()

button = Button(root, text='Обчислити')
button.pack()
button.bind('<Button-1>', calculate)

label_result = Label(root, text='Результат:')
label_result.pack()

root.mainloop()

6. Створіть математичну модель і проєкт для обчислення довжини кола за даним радіусом, використовуючи константу.

Математична модель:

  • Вхідні дані: радіус кола R.
  • Константа: число $\pi$ (PI = 3.14159).
  • Результат: довжина кола L.
  • Формула: $L = 2 \cdot \pi \cdot R$
# завдання 4.4.6
from tkinter import *

PI = 3.14159

def calculate(event):
    r = float(entry_r.get())
    length = 2 * PI * r
    label_result['text'] = f'Довжина кола: {length:.2f}' # .2f для двох знаків після коми

root = Tk()
root.title('Завдання 4.4.6')

Label(root, text='Введіть радіус R:').pack()
entry_r = Entry(root)
entry_r.pack()

button = Button(root, text='Обчислити')
button.pack()
button.bind('<Button-1>', calculate)

label_result = Label(root, text='Довжина кола:')
label_result.pack()

root.mainloop()

7. Створіть математичну модель і проєкт для обчислення шляху, який проходить світло у вакуумі за певний час.

Математична модель:

  • Вхідні дані: час t (в секундах).
  • Константа: швидкість світла у вакуумі c (приблизно 300 000 000 м/с).
  • Результат: шлях S (в метрах).
  • Формула: $S = c \cdot t$
# завдання 4.4.7
from tkinter import *

SPEED_OF_LIGHT = 299792458 # м/с

def calculate(event):
    t = float(entry_t.get())
    distance = SPEED_OF_LIGHT * t
    label_result['text'] = f'Шлях: {distance} метрів'

root = Tk()
root.title('Завдання 4.4.7')

Label(root, text='Введіть час t (в секундах):').pack()
entry_t = Entry(root)
entry_t.pack()

button = Button(root, text='Обчислити')
button.pack()
button.bind('<Button-1>', calculate)

label_result = Label(root, text='Шлях:')
label_result.pack()

root.mainloop()

8. Створіть математичну модель і проєкт для визначення, яку суму грошей має заплатити споживач за використану електроенергію.

Математична модель:

  • Вхідні дані: кількість спожитої електроенергії W (у кВт·год).
  • Константа: тариф за 1 кВт·год T (наприклад, 2.64 грн).
  • Результат: сума до сплати S (у грн).
  • Формула: $S = W \cdot T$
# завдання 4.4.8
from tkinter import *

TARIFF = 2.64 # грн за кВт·год (умовний тариф)

def calculate(event):
    w = float(entry_w.get())
    cost = w * TARIFF
    label_result['text'] = f'До сплати: {cost:.2f} грн'

root = Tk()
root.title('Завдання 4.4.8')

Label(root, text='Введіть спожиту енергію (кВт·год):').pack()
entry_w = Entry(root)
entry_w.pack()

button = Button(root, text='Розрахувати вартість')
button.pack()
button.bind('<Button-1>', calculate)

label_result = Label(root, text='До сплати:')
label_result.pack()

root.mainloop()

9. Клієнт поклав у банк х грн під р % річних. За умовою банку прибуток за рік додається до вкладу. Створіть математичну модель і проєкт для визначення, який прибуток клієнт отримає через 2 роки.

Математична модель:

  • Вхідні дані: початкова сума x (грн), річний відсоток p.
  • Розрахунок:
    1. Сума після 1-го року: $x_1 = x + x \cdot \frac{p}{100} = x \cdot (1 + \frac{p}{100})$
    2. Сума після 2-го року: $x_2 = x_1 + x_1 \cdot \frac{p}{100} = x_1 \cdot (1 + \frac{p}{100}) = x \cdot (1 + \frac{p}{100})^2$
    3. Прибуток за 2 роки: profit $= x_2 – x$
# завдання 4.4.9
from tkinter import *

def calculate(event):
    x = float(entry_x.get())
    p = float(entry_p.get())
    
    # Розрахунок суми через 2 роки
    total_amount = x * (1 + p / 100)**2
    
    # Розрахунок чистого прибутку
    profit = total_amount - x
    
    label_result['text'] = f'Прибуток за 2 роки: {profit:.2f} грн'

root = Tk()
root.title('Завдання 4.4.9')

Label(root, text='Введіть початкову суму (грн):').pack()
entry_x = Entry(root)
entry_x.pack()

Label(root, text='Введіть річний відсоток (%):').pack()
entry_p = Entry(root)
entry_p.pack()

button = Button(root, text='Розрахувати прибуток')
button.pack()
button.bind('<Button-1>', calculate)

label_result = Label(root, text='Прибуток за 2 роки:')
label_result.pack()

root.mainloop()

Практична робота № 4. «Проєкти з полями, написами і кнопками, з уведенням даних і виведенням результатів»

Задача 1. Проєкт «практична 4.1»

Цей проєкт створює вікно з полем та кнопкою. Після натискання на кнопку властивості поля змінюються.

# практична 4.1
from tkinter import *

# Обробник події для кнопки
def change_field_properties():
    # Отримуємо поточну ширину поля і додаємо 20
    new_width = field.cget("width") + 20
    
    # Змінюємо властивості поля
    field.config(bg="red", fg="white", font="Arial 14", width=new_width)
    
    # Очищуємо поле і вставляємо новий текст
    field.delete(0, END)
    field.insert(0, "Ми використовуємо властивості поля!")

# Створення головного вікна
root = Tk()
root.title("Практична 4.1")
root.geometry("500x150") # Розмір вікна# Створення поля
field = Entry(root, width=15, bd=3)
field.place(x=20, y=30) # Розміщення з відступами# Створення кнопки
button = Button(root, 
                text="8-А клас", # Вкажіть свій клас
                width=10, 
                fg="blue", 
                bg="yellow",
                command=change_field_properties) # Прив'язка функції до кнопки# Розміщення кнопки з відступом від поля
button.place(x=20, y=70) *# 30 (відступ поля) + 25 (висота поля) + 15 (відступ) ~ 70# Запуск головного циклу
root.mainloop()

Задача 2. Проєкт «практична 4.2»

Математична модель:

  • Вхідні дані: два числа a і b.
  • Результат: число result.
  • Формула: $result = a \cdot (4 \cdot b – a)$

Код проєкту:

# практична 4.2
from tkinter import *

# Функція для обчислення
def calculate():
    try:
        a = float(entry_a.get())
        b = float(entry_b.get())
        result = a * (4 * b - a)
        label_result.config(text=f"Результат: {result}")
    except ValueError:
        label_result.config(text="Помилка: введіть числа!")

# Створення вікна
root = Tk()
root.title("Практична 4.2")
root.geometry("300x200")

# Створення компонентів
Label(root, text="Введіть число a:").pack()
entry_a = Entry(root)
entry_a.pack()

Label(root, text="Введіть число b:").pack()
entry_b = Entry(root)
entry_b.pack()

Button(root, text="Обчислити", command=calculate).pack(pady=10)

label_result = Label(root, text="Результат:")
label_result.pack()

root.mainloop()

Задача 3. Проєкт «практична 4.3»

Математична модель:

  • Вхідні дані:
    • money: сума грошей, яку дала мати (грн).
    • cookie_price: ціна печива за 1 кг (грн).
    • milk_price: ціна за 1 пакет молока (грн).
    • bread_price: ціна хліба (грн).
  • Витрати:
    • Вартість печива: cookie_price * 0.4 (бо 400 г = 0.4 кг).
    • Вартість молока: milk_price * 2.
  • Результат: change (решта).
  • Формула: $change = money – (cookie_price \cdot 0.4 + milk_price \cdot 2 + bread_price)$

Код проєкту:

# практична 4.3
from tkinter import *

# Функція для розрахунку решти
def calculate_change():
    try:
        money = float(entry_money.get())
        cookie_price = float(entry_cookie.get())
        milk_price = float(entry_milk.get())
        bread_price = float(entry_bread.get())
        
        # Обчислення загальних витрат
        total_cost = (cookie_price * 0.4) + (milk_price * 2) + bread_price
        
        # Обчислення решти
        change = money - total_cost
        
        # Виведення результату
        label_result.config(text=f"Решта: {change:.2f} грн")
    except ValueError:
        label_result.config(text="Помилка: перевірте введені дані!")

# Створення вікна
root = Tk()
root.title("Практична 4.3")
root.geometry("350x300")

# Компоненти для введення даних
Label(root, text="Скільки грошей у Марійки (грн):").pack()
entry_money = Entry(root)
entry_money.pack()

Label(root, text="Ціна печива (за 1 кг):").pack()
entry_cookie = Entry(root)
entry_cookie.pack()

Label(root, text="Ціна молока (за пакет):").pack()
entry_milk = Entry(root)
entry_milk.pack()

Label(root, text="Ціна хліба:").pack()
entry_bread = Entry(root)
entry_bread.pack()

# Кнопка та напис для результату
Button(root, text="Розрахувати решту", command=calculate_change).pack(pady=15)

label_result = Label(root, text="Решта:")
label_result.pack()

root.mainloop()

Готуємось до вивчення нового матеріалу

1. Які типи змінних ви знаєте? Наведіть приклади їх значень.

Я знаю такі основні типи змінних:

  • Цілий тип (int): використовується для цілих чисел. Приклади: 5, 10, 0.
  • Дійсний або дробовий тип (float): використовується для дробових чисел. Приклади: 2.7, 15.38, 0.5.
  • Рядковий тип (string): використовується для тексту. Приклади: "Привіт", "Я навчаюсь", "8-А клас".

2. Що визначають типи змінних?

Тип змінної визначає, які значення вона може приймати та які операції з нею можна виконувати. Наприклад, зі змінними числових типів (int і float) можна робити математичні обчислення (додавати, множити), а зі змінними рядкового типу так робити не можна, оскільки вони представляють текст.

Залишити коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Прокрутка до верху