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

Основи Tkinter 11

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

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

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

1

12 з 24 балів

Домашня бухгалтерія на Tkinter

Тобі потрібно створити програму «Домашня бухгалтерія», яка дозволяє вести облік особистих доходів та витрат.

09023uk5-3617-940x983.png

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

# ДОМАШНЯ БУХГАЛТЕРІЯ НА TKINTER

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



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

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

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


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

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

from tkinter import *


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

from tkinter.ttk import Combobox


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

from tkinter import messagebox



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

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

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


# Категорії доходів.

income_categories = [

"Зарплата",

"Подарунок",

"Підробіток",

"Продаж",

"Інше"

]


# Категорії витрат.

expense_categories = [

"Продукти",

"Паливо",

"Кафе",

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

"Розваги",

"Інше"

]



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

# СПИСОК УСІХ ОПЕРАЦІЙ

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


# Порожній список.

# Тут будуть зберігатися всі записи.

operations = []



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

# ФУНКЦІЯ ОНОВЛЕННЯ КАТЕГОРІЙ

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


def update_categories():


"""

Функція змінює список категорій

залежно від вибраного типу операції.

"""


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

operation_type = type_box.get()


# Якщо обрано Доходи.

if operation_type == "Доходи":


# Завантажуємо список категорій доходів.

category_box["values"] = income_categories


else:


# Інакше завантажуємо категорії витрат.

category_box["values"] = expense_categories


# Встановлюємо перший елемент списку.

category_box.current(0)



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

# ФУНКЦІЯ ПЕРЕРАХУНКУ БАЛАНСУ

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


def update_balance():


"""

Рахує:

- загальні доходи

- загальні витрати

- баланс

"""


# Початкові значення.

income_total = 0

expense_total = 0


# Перебираємо всі операції.

for operation in operations:


# Якщо це дохід.

if operation["type"] == "Доходи":


# Додаємо до доходів.

income_total += operation["amount"]


else:


# Додаємо до витрат.

expense_total += operation["amount"]


# Баланс = доходи - витрати.

balance = income_total - expense_total


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

income_label.config(

text=f"Доходи: {income_total:.2f} грн"

)


expense_label.config(

text=f"Витрати: {expense_total:.2f} грн"

)


balance_label.config(

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

)



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

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

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


def add_operation():


"""

Додає новий запис.

"""


try:


# Отримуємо суму.

amount = float(

amount_entry.get()

)


# Перевірка.

if amount <= 0:


messagebox.showerror(

"Помилка",

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

)


return


# Отримуємо тип операції.

operation_type = type_box.get()


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

category = category_box.get()


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

operation = {

"type": operation_type,

"category": category,

"amount": amount

}


# Додаємо до списку.

operations.append(operation)


# Якщо дохід.

if operation_type == "Доходи":


sign = "+"


else:


sign = "-"


# Додаємо запис до Listbox.

history_list.insert(

END,

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

)


# Перераховуємо баланс.

update_balance()


# Очищаємо поле.

amount_entry.delete(0, END)


except:


messagebox.showerror(

"Помилка",

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

)



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

# ФУНКЦІЯ ВИДАЛЕННЯ ЗАПИСУ

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


def delete_operation():


"""

Видаляє вибраний запис.

"""


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

selected = history_list.curselection()


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

if not selected:


messagebox.showwarning(

"Увага",

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

)


return


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

index = selected[0]


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

operations.pop(index)


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

history_list.delete(index)


# Оновлюємо баланс.

update_balance()



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

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

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


def show_statistics():


"""

Показує статистику по категоріях.

"""


stats = {}


# Перебираємо операції.

for operation in operations:


category = operation["category"]


amount = operation["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"

)


if result == "":

result = "Немає даних"


messagebox.showinfo(

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

result

)



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

# ГОЛОВНЕ ВІКНО

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


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

root = Tk()


# Заголовок програми.

root.title("Домашня бухгалтерія")


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

root.geometry("650x650")


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

root.resizable(False, False)



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

# ЗАГОЛОВОК

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


title_label = Label(

root,

text="ДОМАШНЯ БУХГАЛТЕРІЯ",

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

)


title_label.pack(pady=10)



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

# ТИП ОПЕРАЦІЇ

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


Label(

root,

text="Тип операції:"

).pack()


type_box = Combobox(

root,

values=["Доходи", "Витрати"],

state="readonly"

)


type_box.pack()


type_box.current(0)


type_box.bind(

"<<ComboboxSelected>>",

lambda event: update_categories()

)



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

# КАТЕГОРІЯ

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


Label(

root,

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

).pack()


category_box = Combobox(

root,

state="readonly"

)


category_box.pack()



# Заповнюємо категорії.

update_categories()



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

# СУМА

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


Label(

root,

text="Сума:"

).pack()


amount_entry = Entry(

root,

width=20,

font=("Arial", 12)

)


amount_entry.pack(pady=5)



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

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

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


Button(

root,

text="Додати операцію",

command=add_operation

).pack(pady=10)



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

# ІСТОРІЯ

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


history_list = Listbox(

root,

width=60,

height=15

)


history_list.pack(pady=10)



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

# СТАТИСТИКА

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


income_label = Label(

root,

text="Доходи: 0.00 грн",

font=("Arial", 12)

)


income_label.pack()


expense_label = Label(

root,

text="Витрати: 0.00 грн",

font=("Arial", 12)

)


expense_label.pack()


balance_label = Label(

root,

text="Баланс: 0.00 грн",

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

)


balance_label.pack(pady=10)



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

# КНОПКИ КЕРУВАННЯ

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


Button(

root,

text="Видалити запис",

command=delete_operation

).pack(pady=5)


Button(

root,

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

command=show_statistics

).pack(pady=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 грн

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

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

165

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

83 грн

74 грн

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

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

164

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

25 грн

Основи статистичного аналізу даних. Ряди даних.

Основи статистичного аналізу даних. Ряди даних.

92

Аватар профіля Бєлова Тетяна Іванівна
Інформатика
10 клас

35 грн

Урок 2: Основи HTML — Структура вебсторінки

Урок 2: Основи HTML — Структура вебсторінки

64

Аватар профіля Нікішина Катерина Іванівна
Інформатика
7—12 клас, I—VI курси, дорослі та змішані

41 грн

Схожі уроки

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

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

1276

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

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

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

1090

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

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

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

1335

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

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

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

489

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

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

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

642

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

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

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

267

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