Сьогодні відбувся
Вебінар:
«
Інтеграція знань, практики та інноваційних технологій у професійному розвитку педагогів закладів освіти
»
Взяти участь Всі події
Урок:

Основи Tkinter 10

Вміст уроку:
1
2

Урок не містить жодного завдання. Додайте завдання.

Щоб додати завдання, оберіть категорію завдання на панелі запитань.

1

12 з 24 балів

Міні-банкомат

  • Баланс.

  • Поповнення.

  • Зняття коштів.

  • Історія операцій.

    09023ujy-f3b5-910x1066.png

# Імпортуємо все необхідне з бібліотеки tkinter

from tkinter import *

# Імпортуємо готові вікна повідомлень

from tkinter import messagebox

# ---------------------------------------------------

# ЗМІННІ ПРОГРАМИ

# ---------------------------------------------------

# Поточний баланс рахунку.

# Глобальна змінна, доступна всім функціям.

balance = 1000

# ---------------------------------------------------

# ФУНКЦІЯ ПОПОВНЕННЯ РАХУНКУ

# ---------------------------------------------------

def deposit():

# Вказуємо, що будемо працювати

# з глобальною змінною balance

global balance

try:

# Отримуємо текст з поля введення

amount = entry_amount.get()

# Перетворюємо текст у число

amount = float(amount)

# Перевіряємо чи число більше нуля

if amount <= 0:

# Показуємо повідомлення про помилку

messagebox.showerror(

"Помилка",

"Сума повинна бути більше нуля!"

)

# Завершуємо функцію

return

# Додаємо суму до балансу

balance += amount

# Оновлюємо напис балансу

label_balance.config(

text=f"Баланс: {balance:.2f} грн"

)

# Додаємо запис в історію

history_text.insert(

END,

f"+ {amount:.2f} грн\n"

)

# Очищаємо поле введення

entry_amount.delete(0, END)

except:

# Якщо користувач ввів текст замість числа

messagebox.showerror(

"Помилка",

"Введіть число!"

)

# ---------------------------------------------------

# ФУНКЦІЯ ЗНЯТТЯ КОШТІВ

# ---------------------------------------------------

def withdraw():

global balance

try:

# Отримуємо введене значення

amount = float(entry_amount.get())

# Перевірка на від'ємне число

if amount <= 0:

messagebox.showerror(

"Помилка",

"Сума повинна бути більше нуля!"

)

return

# Перевіряємо чи вистачає грошей

if amount > balance:

messagebox.showerror(

"Помилка",

"Недостатньо коштів!"

)

return

# Віднімаємо гроші

balance -= amount

# Оновлюємо баланс на екрані

label_balance.config(

text=f"Баланс: {balance:.2f} грн"

)

# Записуємо операцію в історію

history_text.insert(

END,

f"- {amount:.2f} грн\n"

)

# Очищаємо поле введення

entry_amount.delete(0, END)

except:

messagebox.showerror(

"Помилка",

"Введіть число!"

)

# ---------------------------------------------------

# ФУНКЦІЯ ОЧИЩЕННЯ ІСТОРІЇ

# ---------------------------------------------------

def clear_history():

# Видаляємо весь текст

# від першого символу до останнього

history_text.delete("1.0", END)

# ---------------------------------------------------

# СТВОРЕННЯ ГОЛОВНОГО ВІКНА

# ---------------------------------------------------

# Створюємо головне вікно

root = Tk()

# Назва вікна

root.title("Міні-Банкомат")

# Розмір вікна

root.geometry("450x500")

# Забороняємо змінювати розмір

root.resizable(False, False)

# ---------------------------------------------------

# ЗАГОЛОВОК

# ---------------------------------------------------

label_title = Label(

root,

text="МІНІ-БАНКОМАТ",

font=("Arial", 18, "bold")

)

# Розміщуємо елемент

label_title.pack(pady=10)

# ---------------------------------------------------

# БАЛАНС

# ---------------------------------------------------

label_balance = Label(

root,

text=f"Баланс: {balance:.2f} грн",

font=("Arial", 16)

)

label_balance.pack(pady=10)

# ---------------------------------------------------

# ПІДПИС ДО ПОЛЯ ВВЕДЕННЯ

# ---------------------------------------------------

label_amount = Label(

root,

text="Введіть суму:"

)

label_amount.pack()

# ---------------------------------------------------

# ПОЛЕ ВВЕДЕННЯ

# ---------------------------------------------------

entry_amount = Entry(

root,

font=("Arial", 14),

justify="center"

)

entry_amount.pack(pady=10)

# ---------------------------------------------------

# КНОПКА ПОПОВНЕННЯ

# ---------------------------------------------------

button_deposit = Button(

root,

text="Поповнити",

font=("Arial", 12),

width=20,

command=deposit

)

button_deposit.pack(pady=5)

# ---------------------------------------------------

# КНОПКА ЗНЯТТЯ

# ---------------------------------------------------

button_withdraw = Button(

root,

text="Зняти кошти",

font=("Arial", 12),

width=20,

command=withdraw

)

button_withdraw.pack(pady=5)

# ---------------------------------------------------

# КНОПКА ОЧИЩЕННЯ ІСТОРІЇ

# ---------------------------------------------------

button_clear = Button(

root,

text="Очистити історію",

font=("Arial", 12),

width=20,

command=clear_history

)

button_clear.pack(pady=5)

# ---------------------------------------------------

# НАПИС ІСТОРІЯ

# ---------------------------------------------------

label_history = Label(

root,

text="Історія операцій",

font=("Arial", 14, "bold")

)

label_history.pack(pady=10)

# ---------------------------------------------------

# ПОЛЕ ІСТОРІЇ

# ---------------------------------------------------

history_text = Text(

root,

width=40,

height=10,

font=("Consolas", 11)

)

history_text.pack(pady=10)

# ---------------------------------------------------

# ЗАПУСК ПРОГРАМИ

# ---------------------------------------------------

# Без цього рядка вікно не відкриється

root.mainloop()

Облік витрат

Категорії:

  • Продукти

  • Паливо

  • Розваги

  • Комунальні

Показує загальну статистику.

09023ujw-3844-940x1072.png

# =====================================================

# ОБЛІК ВИТРАТ НА TKINTER

# =====================================================



# -----------------------------------------------------

# ІМПОРТ БІБЛІОТЕК

# -----------------------------------------------------


# Імпортуємо всі основні віджети Tkinter:

# Label, Button, Entry, Listbox, Tk та інші.

from tkinter import *


# Імпортуємо Combobox (випадаючий список).

from tkinter.ttk import Combobox


# Імпортуємо готові вікна повідомлень.

from tkinter import messagebox



# -----------------------------------------------------

# ГЛОБАЛЬНІ ЗМІННІ

# -----------------------------------------------------


# Порожній список для зберігання всіх витрат.

# Кожен елемент буде словником.

expenses = []


# Список категорій витрат.

categories = [

"Продукти",

"Паливо",

"Кафе",

"Розваги",

"Комунальні",

"Інше"

]



# -----------------------------------------------------

# ФУНКЦІЯ ОНОВЛЕННЯ ЗАГАЛЬНОЇ СУМИ

# -----------------------------------------------------


def update_total():


# Створюємо змінну для накопичення суми.

total = 0


# Цикл перебирає всі витрати.

for expense in expenses:


# До загальної суми додаємо значення поля amount.

total += expense["amount"]


# Змінюємо текст напису.

total_label.config(

text=f"Загалом: {total:.2f} грн"

)



# -----------------------------------------------------

# ФУНКЦІЯ ДОДАВАННЯ ВИТРАТИ

# -----------------------------------------------------


def add_expense():


try:


# Отримуємо текст із поля введення.

amount = entry_amount.get()


# Перетворюємо текст у число.

amount = float(amount)


# Перевіряємо чи число більше нуля.

if amount <= 0:


# Виводимо повідомлення про помилку.

messagebox.showerror(

"Помилка",

"Сума повинна бути більше нуля!"

)


return


# Отримуємо вибрану категорію.

category = category_box.get()


# Створюємо словник нової витрати.

expense = {

"category": category,

"amount": amount

}


# Додаємо словник у список витрат.

expenses.append(expense)


# Додаємо рядок у Listbox.

expense_list.insert(

END,

f"{category} - {amount:.2f} грн"

)


# Оновлюємо суму.

update_total()


# Очищаємо поле введення.

entry_amount.delete(0, END)


except:


# Якщо введено не число.

messagebox.showerror(

"Помилка",

"Введіть числове значення!"

)



# -----------------------------------------------------

# ФУНКЦІЯ ВИДАЛЕННЯ ВИТРАТИ

# -----------------------------------------------------


def remove_expense():


# Отримуємо вибраний рядок.

selected = expense_list.curselection()


# Якщо нічого не вибрано.

if not selected:


messagebox.showwarning(

"Увага",

"Виберіть запис!"

)


return


# Отримуємо номер вибраного рядка.

index = selected[0]


# Видаляємо витрату зі списку.

expenses.pop(index)


# Видаляємо рядок із Listbox.

expense_list.delete(index)


# Оновлюємо загальну суму.

update_total()



# -----------------------------------------------------

# ФУНКЦІЯ ОЧИЩЕННЯ ВСІХ ВИТРАТ

# -----------------------------------------------------


def clear_expenses():


# Видаляємо всі елементи списку.

expenses.clear()


# Видаляємо всі рядки Listbox.

expense_list.delete(0, END)


# Оновлюємо суму.

update_total()



# -----------------------------------------------------

# ФУНКЦІЯ ПОКАЗУ СТАТИСТИКИ

# -----------------------------------------------------


def show_statistics():


# Якщо витрат немає.

if len(expenses) == 0:


messagebox.showinfo(

"Статистика",

"Дані відсутні."

)


return


# Порожній словник для статистики.

stats = {}


# Перебираємо всі витрати.

for expense in expenses:


# Категорія поточної витрати.

category = expense["category"]


# Сума поточної витрати.

amount = expense["amount"]


# Якщо категорії ще немає.

if category not in stats:


# Створюємо її.

stats[category] = 0


# Додаємо суму.

stats[category] += amount


# Текст майбутнього повідомлення.

result = ""


# Формуємо статистику.

for category, amount in stats.items():


result += (

f"{category}: "

f"{amount:.2f} грн\n"

)


# Виводимо статистику.

messagebox.showinfo(

"Статистика",

result

)



# -----------------------------------------------------

# СТВОРЕННЯ ГОЛОВНОГО ВІКНА

# -----------------------------------------------------


# Створюємо головне вікно програми.

root = Tk()


# Заголовок вікна.

root.title("Облік витрат")


# Розмір вікна.

root.geometry("550x600")


# Забороняємо зміну розміру.

root.resizable(False, False)



# -----------------------------------------------------

# ЗАГОЛОВОК

# -----------------------------------------------------


title_label = Label(

root,

text="ОБЛІК ВИТРАТ",

font=("Arial", 18, "bold")

)


title_label.pack(

pady=10

)



# -----------------------------------------------------

# НАПИС СУМА

# -----------------------------------------------------


amount_label = Label(

root,

text="Введіть суму:"

)


amount_label.pack()



# -----------------------------------------------------

# ПОЛЕ ВВЕДЕННЯ СУМИ

# -----------------------------------------------------


entry_amount = Entry(

root,

width=20,

font=("Arial", 12)

)


entry_amount.pack(

pady=5

)



# -----------------------------------------------------

# НАПИС КАТЕГОРІЯ

# -----------------------------------------------------


category_label = Label(

root,

text="Категорія:"

)


category_label.pack()



# -----------------------------------------------------

# COMBOBOX КАТЕГОРІЙ

# -----------------------------------------------------


category_box = Combobox(

root,

values=categories,

state="readonly"

)


category_box.pack(

pady=5

)


# Встановлюємо першу категорію за замовчуванням.

category_box.current(0)



# -----------------------------------------------------

# КНОПКА ДОДАТИ

# -----------------------------------------------------


add_button = Button(

root,

text="Додати витрату",

width=20,

command=add_expense

)


add_button.pack(

pady=10

)



# -----------------------------------------------------

# НАПИС ІСТОРІЯ

# -----------------------------------------------------


history_label = Label(

root,

text="Історія витрат",

font=("Arial", 14, "bold")

)


history_label.pack()



# -----------------------------------------------------

# LISTBOX

# -----------------------------------------------------


expense_list = Listbox(

root,

width=40,

height=12,

font=("Arial", 11)

)


expense_list.pack(

pady=10

)



# -----------------------------------------------------

# НАПИС ЗАГАЛЬНА СУМА

# -----------------------------------------------------


total_label = Label(

root,

text="Загалом: 0.00 грн",

font=("Arial", 14, "bold")

)


total_label.pack(

pady=10

)



# -----------------------------------------------------

# ФРЕЙМ ДЛЯ КНОПОК

# -----------------------------------------------------


buttons_frame = Frame(root)


buttons_frame.pack()



# -----------------------------------------------------

# КНОПКА ВИДАЛИТИ

# -----------------------------------------------------


remove_button = Button(

buttons_frame,

text="Видалити",

width=15,

command=remove_expense

)


remove_button.pack(

side=LEFT,

padx=5

)



# -----------------------------------------------------

# КНОПКА ОЧИСТИТИ

# -----------------------------------------------------


clear_button = Button(

buttons_frame,

text="Очистити",

width=15,

command=clear_expenses

)


clear_button.pack(

side=LEFT,

padx=5

)



# -----------------------------------------------------

# КНОПКА СТАТИСТИКА

# -----------------------------------------------------


stats_button = Button(

buttons_frame,

text="Статистика",

width=15,

command=show_statistics

)


stats_button.pack(

side=LEFT,

padx=5

)



# -----------------------------------------------------

# ЗАПУСК ПРОГРАМИ

# -----------------------------------------------------


# Запускає головний цикл Tkinter.

# Без цього рядка вікно не відкриється.

root.mainloop()

2

12 з 24 балів

Виправити помилки в файлі банкомат.py та прикріпити виправлений файл.

Рефлексія від 0 учнів

Сподобався:

0

Так: 0

Ні: 0

Зрозумілий:

0

Так: 0

Ні: 0

Потрібні роз'яснення:

0

Ні: 0

Так: 0

Рекомендуємо

§ 10. Графічні методи модуля tkinter

§ 10. Графічні методи модуля tkinter

481

Аватар профіля Киреєва Оксана Анатоліївна
Інформатика
7 клас

50 грн

10-11 клас. Урок 14. Створення моделей на основі сплайнів. Лофтинг (Blender)

10-11 клас. Урок 14. Створення моделей на основі сплайнів. Лофтинг (Blender)

283

Аватар профіля Вітенко Іван
Інформатика
10—11 клас

72 грн

Славія 10 кл «Проектна технологія як основа сучасного виробництва»

Славія 10 кл «Проектна технологія як основа сучасного виробництва»

200

Аватар профіля Чемерис Олена Андріївна
Технології
10 клас

245 грн

Травми голови. Захист України. Основи медичних знань. 10 клас

Травми голови. Захист України. Основи медичних знань. 10 клас

67

Аватар профіля Герасименко Ірина Миколаївна
Захист України
10 клас

50 грн

Основи колористики.

Основи колористики.

165

Аватар профіля Кучерява Наталія Геннадіївна
Технології
10—12 клас та I—III курси

83 грн

74 грн

Тематична робота з інформатики "Основи інформаційної безпеки"

Тематична робота з інформатики "Основи інформаційної безпеки"

164

Аватар профіля Губчик Вероніка Григорівна
Інформатика
9 клас

25 грн

Схожі уроки

Впорядкування, пошук і фільтрування даних.

Впорядкування, пошук і фільтрування даних.

1276

Аватар профіля Вожга Ірина Леонідівна
Інформатика
9 клас

Створення й уведення структури таблиць. Поняття таблиці, поля, запису. Створення таблиць, означення полів і ключів у середовищі СКБД. Властивості полів, типи даних.

Створення й уведення структури таблиць. Поняття таблиці, поля, запису. Створення таблиць, означення полів і ключів у середовищі СКБД. Властивості полів, типи даних.

1090

Аватар профіля Савка-Ржематорська Оксана Василівна
Інформатика
9 клас

Цикли з передумовою у вкладених циклах

Цикли з передумовою у вкладених циклах

1335

Аватар профіля Вожга Ірина Леонідівна
Інформатика
6 клас

Налаштування часових параметрів аудіо- та відеоряду.

Налаштування часових параметрів аудіо- та відеоряду.

489

Аватар профіля Солодовнікова Катерина Олексіївна
Інформатика
8 клас

Елемент керування «кнопка». Поняття об’єкту та його властивостей і методів (на прикладі елементів екранної форми). Властивості і методи елементів керування.

Елемент керування «кнопка». Поняття об’єкту та його властивостей і методів (на прикладі елементів екранної форми). Властивості і методи елементів керування.

642

Аватар профіля Пилипенко Олена Володимирівна
Інформатика
8 клас

Елемент керування кнопка

Елемент керування кнопка

267

Аватар профіля Пилипенко Олена Володимирівна
Інформатика
8 клас