Скриншот архива с проектом
Структура проекта

Задание
Разработать программу на языке Python для учёта выпускников. В качестве графического интерфейса использовать Tkinter.
Функционал программы
- добавление выпускника;
- редактирование данных;
- удаление данных;
- поиск выпускника по его фамилии;
- обновление данных
Фрагмент программного кода
import tkinter as tk
from tkinter import ttk
import sqlite3
from PIL import ImageTk
import customtkinter
# customtkinter.set_appearance_mode("dark")
# customtkinter.set_default_color_theme("dark-blue")
# Класс Main
def open_update_dialog():
Update()
class Main(customtkinter.CTkFrame):
def __init__(self, root):
super().__init__(root)
self.tree = None
self.refresh_img = ImageTk.PhotoImage(file='refresh.png')
self.search_img = ImageTk.PhotoImage(file='search.png')
self.delete_img = ImageTk.PhotoImage(file='delete.png')
self.edit_img = ImageTk.PhotoImage(file='new_edit.png')
self.add_img = ImageTk.PhotoImage(file='new_add.png')
self.init_main()
self.db = db
self.view_records()
# Главное окно
def init_main(self):
title_label = tk.Label(root, text="Выпускники", font=("Arial", 15, "bold"),
border=12, relief=tk.GROOVE, bg="blue", foreground="yellow")
title_label.pack(side=tk.TOP, fill=tk.X)
toolbar = tk.Frame(bg='beige', bd=2)
toolbar.pack(side=tk.TOP, fill=tk.X)
btn_open_dialog = tk.Button(toolbar, text='Добавить выпускника', command=self.open_dialog, bg='beige',
bd=0, compound=tk.TOP, image=self.add_img)
btn_open_dialog.pack(side=tk.LEFT)
btn_edit_dialog = tk.Button(toolbar, text='Редактировать', bg='beige', bd=0, image=self.edit_img,
compound=tk.TOP, command=open_update_dialog)
btn_edit_dialog.pack(side=tk.LEFT)
btn_delete_dialog = tk.Button(toolbar, text='Удалить', bg='beige', bd=0, image=self.delete_img,
compound=tk.TOP, command=self.delete_records)
btn_delete_dialog.pack(side=tk.LEFT)
btn_search = tk.Button(toolbar, text='Поиск', bg='beige', bd=0, image=self.search_img,
compound=tk.TOP, command=self.open_search_dialog)
btn_search.pack(side=tk.LEFT)
btn_refresh = tk.Button(toolbar, text='Обновить', bg='beige', bd=0, image=self.refresh_img,
compound=tk.TOP, command=self.view_records)
btn_refresh.pack(side=tk.LEFT)
columns = ('ID', 'full_name', 'position', 'salary')
self.tree = ttk.Treeview(self, columns=columns, height=15, show='headings')
self.tree.column('ID', width=30, anchor=tk.CENTER)
self.tree.column('full_name', width=365, anchor=tk.CENTER)
self.tree.column('position', width=120, anchor=tk.CENTER)
self.tree.column('salary', width=110, anchor=tk.CENTER)
self.tree.heading('ID', text='ID')
self.tree.heading('full_name', text='Выпускник')
self.tree.heading('position', text='Должность')
self.tree.heading('salary', text='Зарплата')
self.tree.pack(side=tk.LEFT)
scroll = tk.Scrollbar(self, command=self.tree.yview)
scroll.pack(side=tk.LEFT, fill=tk.Y)
self.tree.configure(yscrollcommand=scroll.set)
# Добавление данных
def records(self, full_name, position, salary):
self.db.insert_data(full_name, position, salary)
self.view_records()
# Обновление данных
def update_record(self, full_name, position, salary):
self.db.c.execute('''UPDATE graduates SET full_name=?, position=?, salary=? WHERE ID=?''',
(full_name, position, salary, self.tree.set(self.tree.selection()[0], '#1')))
self.db.conn.commit()
self.view_records()
# Вывод данных
def view_records(self):
self.db.c.execute('''SELECT * FROM graduates''')
[self.tree.delete(i) for i in self.tree.get_children()]
[self.tree.insert('', 'end', values=row) for row in self.db.c.fetchall()]
# Удаление данных
def delete_records(self):
for selection_item in self.tree.selection():
self.db.c.execute('''DELETE FROM graduates WHERE id=? ''', (self.tree.set(selection_item, '#1'),))
self.db.conn.commit()
self.view_records()
# Поиск данных
def search_records(self, full_name):
full_name = ('%' + full_name + '%',)
self.db.c.execute('''SELECT * FROM graduates WHERE full_name LIKE ?''', full_name)
[self.tree.delete(i) for i in self.tree.get_children()]
[self.tree.insert('', 'end', values=row) for row in self.db.c.fetchall()]
# Открытие дочернего окна
@staticmethod
def open_dialog():
Child()
@staticmethod
def open_search_dialog():
Search()
# Основной код для запуска
if __name__ == "__main__":
root = customtkinter.CTk()
db = DB()
app = Main(root)
app.pack()
root.geometry("665x500+300+200")
root.title("Учет выпускников")
root.resizable(False, False)
root.mainloop()
Пояснения по запуску программы
С оффициального сайта скачать и установить Python, с оффициального сайта скачать и установить PyCharm. Открыть проект. Запустить программу.

Телеграм
-