commit 699697d0b6bb3541474f2127f6346dafffb3b3a3 Author: vadzik Date: Fri Dec 8 14:34:09 2023 +0300 init commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d75edea --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +venv +__pycache__ \ No newline at end of file diff --git a/cfg.ini b/cfg.ini new file mode 100644 index 0000000..3108882 --- /dev/null +++ b/cfg.ini @@ -0,0 +1,2 @@ +[DEFAULT] +db_path = db.json \ No newline at end of file diff --git a/db.json b/db.json new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/db.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/db/__init__.py b/db/__init__.py new file mode 100644 index 0000000..63ab125 --- /dev/null +++ b/db/__init__.py @@ -0,0 +1,46 @@ +from typing import List +from pydantic import BaseModel, Field, TypeAdapter +from uuid import UUID, uuid4 +import json + + +class Record(BaseModel): + id: UUID = Field(default_factory=uuid4) + name: str | None = '' + description:str | None = '' + img_path: str | None = '' + + +class DB: + + records: List[Record] = [] + + path = '' + + def __init__(self, path=''): + if path != '': + with open(path, 'r') as file: + js_data = json.load(file) + tmp = [] + for item in js_data: + tmp.append(json.loads(item)) + js_data = tmp + self.records = [Record(**model_data) for model_data in js_data] + self.path = path + + + def add_record(self, name='', description='', img_path=''): + new_rec = Record(name=name, description=description, img_path=img_path) + self.records.append(new_rec) + with open(self.path, 'w') as file: + model_list_json = [record.model_dump_json() for record in self.records] + json.dump(model_list_json, file) + + def edit_record(self, id): + pass + + + def delete_record(self, id): + for i in range(len(self.records)): + if self.records[i].id == id: + self.records.pop(i) \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000..84b198f --- /dev/null +++ b/main.py @@ -0,0 +1,115 @@ +from tkinter import * +import configparser +from tkinter.ttk import Combobox +import db + +root = None +database = None +config = None +listbox = None + +def load_config(): + global config + config = configparser.ConfigParser() + config.read('cfg.ini') + print(config['DEFAULT']['db_path']) + + +def load_database(): + global database, config + database = db.DB(config['DEFAULT']['db_path']) + + +def help_menu(): + global root + newWindow = Toplevel(root) + newWindow.title("New Window") + newWindow.geometry("200x200") + Label(newWindow, + text ="This is a new window").pack() + + +def fond_menu(): + global root + newWindow = Toplevel(root) + newWindow.title("New Window") + newWindow.geometry("200x200") + Label(newWindow, + text ="This is a new window").pack() + +def close_prog(event): + exit() + +def key_pressed(event): + print(event.keysym) + if event.keysym == 'F1': + print("Клавиша 'F1' была нажата") + if event.keysym == 'F2': + print("Клавиша 'F2' была нажата") + if event.keysym == 'F3': + print("Клавиша 'F3' была нажата") + if event.keysym == 'F4': + print("Клавиша 'F4' была нажата") + +def selected(event): + global listbox + print(event) + # получаем индексы выделенных элементов + selected_indices = listbox.curselection() + # получаем сами выделенные элементы + selected_langs = ",".join([listbox.get(i) for i in selected_indices]) + msg = f"вы выбрали: {selected_langs}" + print(msg) + +def main(): + global root, listbox, database + + load_config() + load_database() + + root = Tk() + root.title("amDB") + root.geometry('600x400+50+50') + root.minsize(400, 300) + root.bind('', key_pressed) + root.bind('', key_pressed) + root.bind('', key_pressed) + root.bind('', key_pressed) + root.bind('', key_pressed) + root.bind('', close_prog) + main_menu = Menu() + + fond_menu = Menu(tearoff=0) + fond_menu.add_command(label="Найти...") + fond_menu.add_separator() + fond_menu.add_command(label="Добавить") + fond_menu.add_command(label="Удалить") + fond_menu.add_command(label="Изменить") + fond_menu.add_separator() + fond_menu.add_command(label="Выход") + + help_menu = Menu(tearoff=0) + help_menu.add_command(label="Содержание") + help_menu.add_separator() + help_menu.add_command(label="О программе") + + main_menu.add_cascade(label="Фонд", menu=fond_menu) + main_menu.add_cascade(label="Справка", menu=help_menu) + + label = Label(root, text="F1-справка F2-добавить F3-удалить F4-изменить F10-меню", bd=1, relief=SUNKEN, anchor=W) + label.pack(side=BOTTOM, fill=X) + + listbox = Listbox(root, justify="left", height=200) + listbox.bind("<>", selected) + listbox.pack(side='top', anchor='nw', fill=Y) + + for record in database.records: + listbox.insert(record.id, record.name) + + root.config(menu=main_menu) + + root.mainloop() + + +if __name__ == "__main__": + main() \ No newline at end of file