· 7 years ago · Feb 06, 2019, 08:56 PM
1import tkinter as tk
2from tkinter import ttk #библиотека Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð°Ð¼Ð¸
3import sqlite3 #модуль базы данных
4
5
6class Main(tk.Frame):
7 def __init__(self, root):
8 super() .__init__(root)
9 self.init_main()
10 self.db = db
11 self.view_records()
12
13 def init_main(self):
14 toolbar = tk.Frame(bg = '#d7d8e0', bd = 2)#Ñоздание тул бара(меню, файл)
15 toolbar.pack(side = tk.TOP, fill = tk.X)# прижимаем тулбар к верху и раÑÑ‚Ñгиваем по горизонтали
16
17 self.add_img = tk.PhotoImage(file = 'add.gif')# ДобавлÑем картинку к кнопке, еÑли картинка GIF лежит не в корневой папке, топ ропиÑываем путь до нее полноÑтью
18 btn_open_dialog = tk.Button(toolbar, text = 'Ðовый', command = self.open_dialog, bg = '#d7d8e0', bd = 0,
19 compound = tk.TOP, image = self.add_img) #Ñоздание кнопки
20 btn_open_dialog.pack(side = tk.LEFT) # выравнивание по левому краю
21
22 self.plus_img = tk.PhotoImage(file = 'plus.gif')
23 btn_plus_dialog = tk.Button(toolbar, text = 'Редактор', command = self.open_dialog, bg = '#d7d8e0', bd = 0,
24 compound = tk.TOP, image = self.plus_img)
25 btn_plus_dialog.pack(side = tk.LEFT)
26
27 self.vision_img = tk.PhotoImage(file = 'vision.gif')
28 btn_vision_dialog = tk.Button(toolbar, text = 'ПроÑмотр', command = self.open_dialog, bg = '#d7d8e0', bd = 0,
29 compound = tk.TOP, image = self.vision_img)
30 btn_vision_dialog.pack(side = tk.LEFT)
31
32 self.import_img = tk.PhotoImage(file = 'import.gif')
33 btn_import_dialog = tk.Button(toolbar, text = 'Импорт', command = self.open_dialog, bg = '#d7d8e0', bd = 0,
34 compound = tk.TOP, image = self.import_img)
35 btn_import_dialog.pack(side = tk.LEFT)
36
37 self.delite_img = tk.PhotoImage(file = 'delite.gif')
38 btn_delite_dialog = tk.Button(toolbar, text = 'Удалить', command = self.open_dialog, bg = '#d7d8e0', bd = 0,
39 compound = tk.TOP, image = self.delite_img)
40 btn_delite_dialog.pack(side = tk.LEFT)
41
42 self.total_img = tk.PhotoImage(file = 'total.gif')
43 btn_total_dialog = tk.Button(toolbar, text = 'ОчиÑтить БД', command = self.open_dialog, bg = '#d7d8e0', bd = 0,
44 compound = tk.TOP, image = self.total_img)
45 btn_total_dialog.pack(side = tk.RIGHT)
46
47 self.tree = ttk.Treeview(self, columns = ('Name', 'dots', 'Capital', 'Config', 'Gyro'), height = 15, show = 'headings')
48
49 self.tree.column('Name', width = 129, anchor = tk.CENTER)
50 self.tree.column('dots', width = 129, anchor = tk.CENTER)
51 self.tree.column('Capital', width = 129, anchor = tk.CENTER)
52 self.tree.column('Config', width = 129, anchor = tk.CENTER)
53 self.tree.column('Gyro', width = 129, anchor = tk.CENTER)
54
55 self.tree.heading('Name', text = 'Ð˜Ð¼Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð°')
56 self.tree.heading('dots', text = 'Ð’Ñего точек')
57 self.tree.heading('Capital', text = 'Ð’Ñего опорных')
58 self.tree.heading('Config', text = 'ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ñ…Ð¾Ð´Ð°')
59 self.tree.heading('Gyro', text = 'Ð’Ñего гироÑторон')
60
61 self.tree.pack()
62
63 def records(self, name, dots, capital, config, gyro):
64 self.db.insert_data(name, dots, capital, config, gyro)
65 self.view_records()
66
67 def view_records(self):
68 self.db.c.execute('''SELECT * FROM matrix''')
69 [self.tree.delete(i) for i in self.tree.get_children()]
70 [self.tree.insert('', 'end', values = row) for row in self.db.c.fetchall()]
71
72 def open_dialog(self):
73 Child()
74
75class Child(tk.Toplevel):
76 def __init__(self):
77 super().__init__(root)
78 self.init_child()
79 self.view = app
80
81 def init_child(self):
82 self.title('Ðовый проект')
83 self.geometry('400x220+400+300')
84 self.resizable(False,False)
85
86 label_name = tk.Label(self, text = 'Ðазвание:')
87 label_name.place(x = 50, y = 20)
88 label_dots = tk.Label(self, text = 'Ð’Ñего точек:')
89 label_dots.place(x = 50, y = 50)
90 label_config = tk.Label(self, text = 'ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ñ…Ð¾Ð´Ð°:')
91 label_config.place(x = 50, y = 110)
92 label_gyro = tk.Label(self, text = 'Ð’Ñего гироÑторон:')
93 label_gyro.place(x = 50, y = 140)
94 label_capital = tk.Label(self, text = 'Ð’Ñего опорных:')
95 label_capital.place(x = 50, y = 80)
96
97 self.entry_name = ttk.Entry(self)
98 self.entry_name.place(x = 200, y = 20)
99
100 self.entry_dots = ttk.Entry(self)
101 self.entry_dots.place(x = 200, y = 50)
102
103 self.entry_gyro = ttk.Entry(self)
104 self.entry_gyro.place(x = 200, y = 140)
105
106 self.entry_capital = ttk.Entry(self)
107 self.entry_capital.place(x = 200, y = 80)
108
109 self.combobox = ttk.Combobox(self, values = [u'ВиÑÑчий', u'Разомкнутый', u'Замкнутый'])
110 self.combobox.current(0)
111 self.combobox.place(x = 200, y = 110)
112
113 btn_cancel = ttk.Button(self, text = 'Закрыть', command = self.destroy)
114 btn_cancel.place(x = 300, y =170)
115
116 btn_ok = ttk.Button(self, text = 'Создать')
117 btn_ok.place(x = 220, y = 170)
118 btn_ok.bind('<Button-1>', lambda event: self.view.records(self.entry_name.get(),
119 self.entry_dots.get(),
120 self.entry_capital.get(),
121 self.combobox.get(),
122 self.entry_gyro.get()))# Ñрабатывает при нажатии левой кнопки мыши
123
124
125 self.grab_set()# Ð½ÐµÐ»ÑŒÐ·Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ñть дейÑтвиÑ, пока не закроетÑÑ Ð¾ÐºÐ½Ð¾ второго уровнÑ
126 self.focus_set()# удержание окна на меÑте
127
128
129class DB:
130 def __init__(self):
131 self.conn = sqlite3.connect('matrix.db')
132 self.c = self.conn.cursor()
133 self.c.execute(
134 '''CREATE TABLE IF NOT EXISTS matrix (name text, dots integer, capital integer, config text, gyro integer)''')
135 self.conn.commit()
136
137 def insert_data(self, name, dots, capital, config, gyro):
138 self.c.execute('''INSERT INTO matrix (name, dots, capital, config, gyro) VALUES (?, ?, ?, ?, ?)''', (name, dots, capital, config, gyro))
139 self.conn.commit()
140
141if __name__ == "__main__":
142 root = tk.Tk()
143 db = DB()
144 app = Main(root)
145 app.pack()
146 root.title("Меню проектов")# название окна
147 root.geometry("650x450+300+200")# размеры окна и положение первой точки
148 root.resizable(False, False)# не изменÑетÑÑ Ð² размерах по вертикали и по горизонтали
149 root.mainloop()