init commit
This commit is contained in:
commit
699697d0b6
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
venv
|
||||||
|
__pycache__
|
||||||
46
db/__init__.py
Normal file
46
db/__init__.py
Normal file
@ -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)
|
||||||
115
main.py
Normal file
115
main.py
Normal file
@ -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('<KeyPress-F1>', key_pressed)
|
||||||
|
root.bind('<KeyPress-F2>', key_pressed)
|
||||||
|
root.bind('<KeyPress-F3>', key_pressed)
|
||||||
|
root.bind('<KeyPress-F4>', key_pressed)
|
||||||
|
root.bind('<KeyPress-F10>', key_pressed)
|
||||||
|
root.bind('<Control-x>', 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("<<ListboxSelect>>", 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()
|
||||||
Loading…
x
Reference in New Issue
Block a user