diff --git a/db.json b/db.json index 0637a08..cebfee7 100644 --- a/db.json +++ b/db.json @@ -1 +1 @@ -[] \ No newline at end of file +["{\"id\":\"96235c7e-19b1-4510-bb09-06013d1344a6\",\"name\":\"\u0410\u0437\u043e\u0432\u0441\u043a\u043e\u0435 \u043c\u043e\u0440\u0435\",\"description\":\"\u043f\u043e\u043b\u0443\u0437\u0430\u043c\u043a\u043d\u0443\u0442\u043e\u0435 \u043c\u043e\u0440\u0435 \u0410\u0442\u043b\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043e\u043a\u0435\u0430\u043d\u0430 \u043d\u0430 \u0432\u043e\u0441\u0442\u043e\u043a\u0435 \u0415\u0432\u0440\u043e\u043f\u044b, \u043e\u043c\u044b\u0432\u0430\u044e\u0449\u0435\u0435 \u043f\u043e\u0431\u0435\u0440\u0435\u0436\u044c\u0435 \u0420\u043e\u0441\u0441\u0438\u0438 \u0438 \u0423\u043a\u0440\u0430\u0438\u043d\u044b. \u0421\u0430\u043c\u043e\u0435 \u043c\u0435\u043b\u043a\u043e\u0435 \u043c\u043e\u0440\u0435 \u0432 \u043c\u0438\u0440\u0435: \u0433\u043b\u0443\u0431\u0438\u043d\u0430 \u043d\u0435 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 13,5 \u043c\u0435\u0442\u0440\u043e\u0432[2], \u0441\u0440\u0435\u0434\u043d\u044f\u044f \u0433\u043b\u0443\u0431\u0438\u043d\u0430 \u043e\u043a\u043e\u043b\u043e 7,4 \u043c (\u043f\u043e \u0440\u0430\u0437\u043d\u044b\u043c \u043e\u0446\u0435\u043d\u043a\u0430\u043c \u2014 \u043e\u0442 6,8 \u0434\u043e 8 \u043c)[3]. \\n \u0421\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u0442\u0441\u044f \u0441 \u0410\u0442\u043b\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043e\u043a\u0435\u0430\u043d\u043e\u043c \u0434\u043b\u0438\u043d\u043d\u043e\u0439 \u0446\u0435\u043f\u043e\u0447\u043a\u043e\u0439 \u043f\u0440\u043e\u043b\u0438\u0432\u043e\u0432 \u0438 \u043c\u043e\u0440\u0435\u0439: \u041a\u0435\u0440\u0447\u0435\u043d\u0441\u043a\u0438\u0439 \u043f\u0440\u043e\u043b\u0438\u0432 \u2014 \u0427\u0451\u0440\u043d\u043e\u0435 \u043c\u043e\u0440\u0435 \u2014 \u043f\u0440\u043e\u043b\u0438\u0432 \u0411\u043e\u0441\u0444\u043e\u0440 \u2014 \u041c\u0440\u0430\u043c\u043e\u0440\u043d\u043e\u0435 \u043c\u043e\u0440\u0435 \u2014 \u043f\u0440\u043e\u043b\u0438\u0432 \u0414\u0430\u0440\u0434\u0430\u043d\u0435\u043b\u043b\u044b \u2014 \u042d\u0433\u0435\u0439\u0441\u043a\u043e\u0435 \u043c\u043e\u0440\u0435 \u2014 \u0421\u0440\u0435\u0434\u0438\u0437\u0435\u043c\u043d\u043e\u0435 \u043c\u043e\u0440\u0435 \u2014 \u0413\u0438\u0431\u0440\u0430\u043b\u0442\u0430\u0440\u0441\u043a\u0438\u0439 \u043f\u0440\u043e\u043b\u0438\u0432. \u041f\u043e \u043e\u0442\u0434\u0430\u043b\u0451\u043d\u043d\u043e\u0441\u0442\u0438 \u043e\u0442 \u043e\u043a\u0435\u0430\u043d\u0430 \u0410\u0437\u043e\u0432\u0441\u043a\u043e\u0435 \u043c\u043e\u0440\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u044b\u043c \u043a\u043e\u043d\u0442\u0438\u043d\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u043c \u043c\u043e\u0440\u0435\u043c \u043f\u043b\u0430\u043d\u0435\u0442\u044b. \u041e\u0431\u044a\u0451\u043c \u0432\u043e\u0434\u044b \u2014 290 \u043a\u043c\u00b3[4]. \\n \u0412 \u0434\u0440\u0435\u0432\u043d\u043e\u0441\u0442\u0438 \u0410\u0437\u043e\u0432\u0441\u043a\u043e\u0433\u043e \u043c\u043e\u0440\u044f \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u043e \u0438 \u0414\u043e\u043d \u0432\u043f\u0430\u0434\u0430\u043b \u0432 \u0427\u0451\u0440\u043d\u043e\u0435 \u043c\u043e\u0440\u0435 \u0432 \u0440\u0430\u0439\u043e\u043d\u0435 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u041a\u0435\u0440\u0447\u0435\u043d\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u043b\u0438\u0432\u0430. \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0430\u043a\u0432\u0430\u0442\u043e\u0440\u0438\u0438 \u0410\u0437\u043e\u0432\u0441\u043a\u043e\u0433\u043e \u043c\u043e\u0440\u044f \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u043e\u043a\u043e\u043b\u043e 5600 \u0433\u043e\u0434\u0430 \u0434\u043e \u043d. \u044d.\",\"img_path\":\"img/azovskoe.jpg\"}"] \ No newline at end of file diff --git a/db/__init__.py b/db/__init__.py index 63ab125..351051b 100644 --- a/db/__init__.py +++ b/db/__init__.py @@ -43,4 +43,9 @@ class DB: 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 + self.records.pop(i) + + +# db_t = DB('db.json') + +# db_t.add_record(name='Азовское море',description='полузамкнутое море Атлантического океана на востоке Европы, омывающее побережье России и Украины. Самое мелкое море в мире: глубина не превышает 13,5 метров[2], средняя глубина около 7,4 м (по разным оценкам — от 6,8 до 8 м)[3]. \n Соединяется с Атлантическим океаном длинной цепочкой проливов и морей: Керченский пролив — Чёрное море — пролив Босфор — Мраморное море — пролив Дарданеллы — Эгейское море — Средиземное море — Гибралтарский пролив. По отдалённости от океана Азовское море является самым континентальным морем планеты. Объём воды — 290 км³[4]. \n В древности Азовского моря не существовало и Дон впадал в Чёрное море в районе современного Керченского пролива. Предполагается, что заполнение акватории Азовского моря произошло около 5600 года до н. э.', img_path='img/azovskoe.jpg') \ No newline at end of file diff --git a/img/azovskoe.jpg b/img/azovskoe.jpg new file mode 100644 index 0000000..906d149 Binary files /dev/null and b/img/azovskoe.jpg differ diff --git a/main.py b/main.py index 84b198f..923cf1f 100644 --- a/main.py +++ b/main.py @@ -1,12 +1,16 @@ from tkinter import * +from tkinter import ttk import configparser -from tkinter.ttk import Combobox import db +from PIL import ImageTk, Image root = None database = None config = None listbox = None +image_label = None +desc_label = None +img = None def load_config(): global config @@ -52,17 +56,24 @@ def key_pressed(event): print("Клавиша 'F4' была нажата") def selected(event): - global listbox + global listbox, image_label, desc_label, img print(event) # получаем индексы выделенных элементов selected_indices = listbox.curselection() # получаем сами выделенные элементы - selected_langs = ",".join([listbox.get(i) for i in selected_indices]) - msg = f"вы выбрали: {selected_langs}" - print(msg) + selected = ''.join([listbox.get(i) for i in selected_indices]) + for record in database.records: + if record.name == selected: + print(record.img_path) + img = ImageTk.PhotoImage(Image.open(record.img_path)) + image_label.config(image=img) + # image_label.pack() + desc_label.insert(1.0,record.description) + + def main(): - global root, listbox, database + global root, listbox, database, image_label, desc_label load_config() load_database() @@ -70,13 +81,16 @@ def main(): root = Tk() root.title("amDB") root.geometry('600x400+50+50') - root.minsize(400, 300) + root.minsize(700, 500) root.bind('', key_pressed) root.bind('', key_pressed) root.bind('', key_pressed) root.bind('', key_pressed) root.bind('', key_pressed) root.bind('', close_prog) + for c in range(3): root.columnconfigure(index=c, weight=1) + for r in range(2): root.rowconfigure(index=r, weight=1) + main_menu = Menu() fond_menu = Menu(tearoff=0) @@ -96,16 +110,27 @@ def main(): 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) + label_bottom = Label(root, text="F1-справка F2-добавить F3-удалить F4-изменить F10-меню", bd=1, relief=SUNKEN, anchor=W, height=1) + label_bottom.place(relx=0.0, rely=0.95, relwidth=1) - listbox = Listbox(root, justify="left", height=200) + + listbox = Listbox(root, justify="left",width=30) listbox.bind("<>", selected) - listbox.pack(side='top', anchor='nw', fill=Y) + listbox.place(x=0,y=0, relheight=0.95) - for record in database.records: - listbox.insert(record.id, record.name) + for i in range(len(database.records)): + listbox.insert(i, database.records[i].name) + image_frame = ttk.Frame(root) + image_label = Label(image_frame, text="Hello Tkinter", borderwidth=2) + image_label.place(relx=0.0, rely=0.0, relheight=1.0, relwidth=1.0) + image_frame.place(relx=0.35, rely=0.0,relheight=0.95, relwidth=0.3) + + desc_frame = ttk.Frame(root) + desc_label = Text(desc_frame, wrap="word") + desc_label.insert(1.0, "test") + desc_label.place(relx=0.0, rely=0.0, relheight=1.0, relwidth=1.0) + desc_frame.place(relx=0.7, rely=0.0, relwidth=0.3, relheight=0.95) root.config(menu=main_menu) root.mainloop()