Конструктор уроків
1
Міні-банкомат
Баланс.
Поповнення.
Зняття коштів.
Історія операцій.

# Імпортуємо все необхідне з бібліотеки 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()
Категорії:
Продукти
Паливо
Розваги
Комунальні
Показує загальну статистику.

# =====================================================
# ОБЛІК ВИТРАТ НА 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
Виправити помилки в файлі банкомат.py та прикріпити виправлений файл.
Рефлексія від 0 учнів
Сподобався:
Так: 0
Ні: 0
Зрозумілий:
Так: 0
Ні: 0
Потрібні роз'яснення:
Ні: 0
Так: 0
Створення й уведення структури таблиць. Поняття таблиці, поля, запису. Створення таблиць, означення полів і ключів у середовищі СКБД. Властивості полів, типи даних.