from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from sqlalchemy.orm import registry from sqlalchemy import create_engine from sqlalchemy.sql.expression import and_ from datetime import date from models import * from tkinter import * from functools import partial from tkinter import messagebox, ttk mapper_registry = registry() engine = create_engine('sqlite:///dipl.db', echo=True) Base = mapper_registry.generate_base() Session = sessionmaker(bind=engine) def main(): window = Tk() window.geometry("400x400") window.title("Вход в аккаунт") window.config(bg="#5D6D7E") lbl1=Label(window,text="Добро пожаловать",font=("",25),fg="#fed9b7",bg="#5D6D7E") lbl1.pack(anchor="center") lbl2=Label(window,text="Логин:",font=("",20),fg="#fdfcdc",bg="#5D6D7E") lbl2.place(x=10,y=90) ent1=Entry(window) ent1.place(x=200,y=100) lbl3=Label(window,text="Пароль:",font=("",20),fg="#fdfcdc",bg="#5D6D7E") lbl3.place(x=10,y=170) ent3=Entry(window) ent3.place(x=200,y=180) btn1=Button(window,text="Принять", command=lambda: validateLogin(ent1.get(), ent3.get())) btn1.place(x=250,y=300) btn2=Button(window,text="Настройки",command=options) btn2.place(x=70,y=300) window.mainloop() def options(): window = Tk() window.geometry("400x400") window.title("Настройки") window.config(bg="#5D6D7E") lbl1=Label(window,text="Измените настройки программы",font=("",25),fg="#fed9b7",bg="#5D6D7E") lbl1.pack(anchor="center") bo1=Button(window,text="1. Добавить должность",command=addDolgnostGui) bo1.place(x=50,y=100) bo2=Button(window,text="2. Добавить пользователя",command=addUserGui) bo2.place(x=200,y=100) bo3=Button(window,text="3. Добавить принтер",command=addPrinterGui) bo3.place(x=50,y=200) bo4=Button(window,text="4. Добавить пластик",command=addPlasticGui) bo4.place(x=200,y=200) window.mainloop() def validateLogin(username, password): sess = Session() users = sess.query(Users).filter(Users.login==username, Users.passwd==password) results = users.first() if hasattr(results,"login"): messagebox.showinfo(title="Успех", message="Вы успешно авторизировались в ситеме.") else: messagebox.showinfo(title="Успех", message="Вы НЕ авторизировались в ситеме.") return def addUserGui(): window = Tk() window.geometry("300x500") window.config(bg="#5D6D7E") l1 = Label(window, text="ФИО") l1.place(x=50,y=100) fio = Entry(window) fio.place(x=150,y=100) l2 = Label(window, text="Должность") l2.place(x=50,y=150) dlg = getDolgnost() dlg_var = StringVar(value=dlg[0]) dolgnost = ttk.Combobox(window,textvariable=dlg_var, values=dlg) dolgnost.place(x=150,y=150) l3 = Label(window, text="Логин") l3.place(x=50,y=250) login = Entry(window) login.place(x=150,y=250) l4 = Label(window, text="Пароль") l4.place(x=50,y=300) passwd = Entry(window) passwd.place(x=150,y=300) print(dolgnost.get()) button_add = Button(window, text="Добавить", command=lambda: addUser(fio.get(), dolgnost.get(), login.get(), passwd.get())) button_add.place(x=100,y=350) def addUser(fio, dolgnost, login, passwd): sess = Session() dlg = sess.query(Dolgnost).filter(Dolgnost.dolgnst==dolgnost).first() newuser = Users(fio=fio, id_dolgnost=dlg.id, login=login, passwd=passwd) sess.add(newuser) sess.commit() sess.close() window.mainloop() def addPrinterGui(): window = Tk() window.geometry("300x300") window.config(bg="#5D6D7E") lp1 = Label(window, text="Название") lp1.place(x=15,y=20) nazvaniee = Entry(window) nazvaniee.place(x=160,y=20) lp2 = Label(window, text="Макс Скорость Печати") lp2.place(x=15,y=70) maxSpedPrint = Entry(window) maxSpedPrint.place(x=160,y=70) lp3 = Label(window, text="Мин Скорость Печати") lp3.place(x=15,y=120) minSpedPrint = Entry(window) minSpedPrint.place(x=160,y=120) bapg=Button(window,text="Добавить",command=lambda:addPrinter(nazvaniee.get(), maxSpedPrint.get(), minSpedPrint.get())) bapg.place(x=220,y=170) def addPrinter(nazvanie, maxsped,minspeed): sess = Session() new = Printer(nazvanie=nazvanie, maxSpedPrint=maxsped, minSpedPrint=minspeed) sess.add(new) sess.commit() sess.close() minSpedPrint.delete(0, END) maxSpedPrint.delete(0, END) nazvaniee.delete(0, END) window.mainloop() def addPlasticGui(): window = Tk() window.geometry("380x350") window.config(bg="#5D6D7E") lpl1 = Label(window, text="Название") lpl1.place(x=15,y=20) nazvanie = Entry(window) nazvanie.place(x=170,y=20) lpl2 = Label(window, text="Диаметр") lpl2.place(x=15,y=70) diametr = Entry(window) diametr.place(x=170,y=70) lpl3 = Label(window, text="Мин Температура Печати") lpl3.place(x=15,y=120) mintempprint = Entry(window) mintempprint.place(x=170,y=120) lpl4 = Label(window, text="Макс Температура Печати") lpl4.place(x=15,y=170) maxtemprint = Entry(window) maxtemprint.place(x=170,y=170) lpl5 = Label(window, text="Дата Производства") lpl5.place(x=15,y=230) days = list(range(1, 32)) months = list(range(1, 13)) years = list(range(1940, 2026)) # Create ComboBox for days day_combobox = ttk.Combobox(window,values=days,width=2) day_combobox.place(x=140,y=230) # Create ComboBox for months month_combobox = ttk.Combobox(window,values=months,width=2) month_combobox.place(x=185,y=230) # Create ComboBox for years year_combobox = ttk.Combobox(window,values=years,width=4) year_combobox.place(x=225,y=230) def convert_to_date(): # Retrieve selected values from the ComboBoxes selected_day = int(day_combobox.get()) selected_month = int(month_combobox.get()) selected_year = int(year_combobox.get()) # Convert the selected values to a date object date_obj = date(selected_year, selected_month, selected_day) return date_obj bapg=Button(window,text="Добавить",command=lambda:addPlastic(nazvanie.get(), diametr.get(), mintempprint.get(), maxtemprint.get(), convert_to_date())) bapg.place(x=230,y=280) def addPlastic(nazvanie, diametr, mintempprint, maxtempprint, dateproizv): sess = Session() new = Plastic(nazvanie=nazvanie, diametr=diametr, minTempPrint=mintempprint, maxTempPrint=maxtempprint, dateproizv=dateproizv) sess.add(new) sess.commit() sess.close() window.mainloop def addDolgnostGui(): window = Tk() window.geometry("300x120") window.config(bg="#5D6D7E") l1 = Label(window,bg="#5D6D7E",text="Должность") l1.grid(row=1, column=0) dolg = Entry(window) dolg.grid(row=1, column=1) button_add = Button(window, text="Добавить", command=lambda: addDolgnost(dolg.get())) button_add.grid(row=5, column=2) def addDolgnost(dolgnost): sess = Session() new = Dolgnost(dolgnst = dolgnost) sess.add(new) sess.commit() sess.close() dolg.delete(0, END) window.mainloop() def addPrintSettingsGui() -> None: window = Tk() window.geometry("800x600") prntc = getPinters() prnt_var = StringVar(value = prntc[0]) plstc = getPlastics() plst_var = StringVar(value=plstc[0]) l1 = Label(window,bg="#5D6D7E",text="Выберите принтер") l1.place(x=10, y=30) prnt = ttk.Combobox(window,textvariable=prnt_var, values=prntc) prnt.place(x=210,y=20) l2 = Label(window,bg="#5D6D7E",text="Выберите пластик") l2.place(x=10, y=80) plst = ttk.Combobox(window,textvariable=plst_var, values=plstc) plst.place(x=210,y=80) l3 = Label(window,bg="#5D6D7E",text="Введите температуру сопла") l3.place(x=10, y=120) tempsopla = Entry(window) tempsopla.place(x=210, y=120) l4 = Label(window,bg="#5D6D7E",text="Введите температуру стола") l4.place(x=10, y=200) tempstola = Entry(window) tempstola.place(x=210, y=200) l5 = Label(window,bg="#5D6D7E",text="Введите процент заполнения") l5.place(x=10, y=250) procentZapoln= Entry(window) procentZapoln.place(x=210, y=250) l6 = Label(window,bg="#5D6D7E",text="Введите скорость печати") l6.place(x=10, y=250) printSpeed= Entry(window) printSpeed.place(x=210, y=300) goodset = IntVar() chk = Checkbutton(window, text='Оптимальные настройки', variable=goodset) chk.place(x=10, y=350) l6 = Label(window,bg="#5D6D7E",text="Примечание") l6.place(x=10, y=400) primech= Entry(window) primech.place(x=210, y=400) button_add = Button(window, text="Добавить", command=lambda: addPrintSettings(prnt.get(), plst.get(), tempsopla.get(), tempstola.get(), procentZapoln.get(), goodset.get(), printSpeed.get(), primech.get())) button_add.place(x=100, y=400) def addPrintSettings(prnt, plst, tempstola, tempsopla, procentzapoln, goodset, printspeed, primech): sess = Session() printer = sess.query(Printer).filter(Printer.nazvanie==prnt).first() plast = sess.query(Plastic).filter(Plastic.nazvanie==plst).first() gs=False if goodset == 0: gs=False else: gs=True import time addtime=time.localtime() new = PrintSettings(tempStol=tempstola, tempSopl=tempsopla, procentZapoln=procentzapoln, PrintSpeed=printspeed, good_set=gs, #time_add=addtime, primechanie=primech, id_printer=printer.id, id_plastic=plast.id, ) sess.add(new) sess.commit() sess.close() #minSpedPrint.delete(0, END) """ dataFrame = Frame(window) dataFrame.pack() table_pre_data = {'tempstol':'Темп. стола', 'tempsopl':'Темп. сопла'} table_columns = [] table_headers = [] for key, value in table_pre_data.items(): table_columns.append(key) table_headers.append(value) prDataFrame = ttk.Treeview(dataFrame) prDataFrame['columns'] = table_columns for col in table_columns: prDataFrfrom sqlalchemy import create_engineame.column(col, width=100) for col in table_headers: prDataFrame.heading(col,text=value) # """ #bapg=Button(window,text="Добавить",command=lambda:getPrintSetings()) window.mainloop() def getPrintSettings(): sess = Session() print() print("query") print() """ psettings = (sess.query(PrintSettings, Printer, Plastic) .join(Printer, PrintSettings.id_printer==Printer.id) .filter(Printer.id==1) .join(Plastic, PrintSettings.id_plastic==Plastic.id) .filter(Plastic.nazvanie=="fdplast") .all() ) """ psettings= ( sess.query(PrintSettings).join(Printer).join(Plastic) .filter((Printer.nazvanie=="ender3" and Plastic.nazvanie=="fdplast" ) ).all() ) print(psettings) for qwe in psettings: print(qwe.id_plastic) plst_naz = sess.query(Plastic).filter(Plastic.id==psettings[0].id_plastic).first() print() print(plst_naz.nazvanie) print() #print(psettings[0][1].nazvanie) print() sess.close() def getUsers(): sess= Session() users = sess.query(Users).join(Dolgnost).all() usr=[] for user in users: a = [] dolg = sess.query(Dolgnost).filter(Dolgnost.id==user.id_dolgnost).first() a.append(user.fio) a.append(dolg.dolgnst) a.append(user.isadmin) usr.append(a) return usr def getDolgnost(): sess = Session() dlggs = sess.query(Dolgnost).all() print(dlggs) dlg_list = [] for dlg in dlggs: dlg_list.append(dlg.dolgnst) sess.close() return dlg_list def getPinters(): sess = Session() printers = sess.query(Printer).all() prnt = [] for printer in printers: prnt.append(printer.nazvanie) sess.close() return prnt def getPlastics(): sess = Session() plastics = sess.query(Plastic).all() plst = [] for plastic in plastics: plst.append(plastic.nazvanie) sess.close() return plst def showAllUsersGui(): window = Tk() window.geometry("800x600") window.iconbitmap(default="3d-printer.ico") window.title("Все пользователи системы") lbl1=Label(window,text="Все пользователи системы",font=("",25),fg="#fed9b7",bg="#5D6D7E") lbl1.pack(anchor="center") users = getUsers() tree = ttk.Treeview(window, column=("fio", "Dolgnost", "isadmin"), show='headings', height=5) tree.column("# 1", anchor=CENTER) tree.heading("# 1", text="ФИО") tree.column("# 2", anchor=CENTER) tree.heading("# 2", text="Должность") tree.column("# 3", anchor=CENTER) tree.heading("# 3", text="Администратор") for user in users: if user[2]==False: tree.insert('', 'end', text="1", values=(user[0], user[1], "Нет")) else: tree.insert('', 'end', text="1", values=(user[0], user[1], "Да")) # tree.pack() mainloop() def editUsers(): root = Tk() columns = ("Items", "Values") Treeview = ttk.Treeview(root, height=18, show="headings", columns=columns) # Treeview.column("Items", width=200, anchor='center') Treeview.column("Values", width=200, anchor='center') Treeview.heading("Items", text="Items") Treeview.heading("Values", text="Values") Treeview.pack(side=LEFT, fill=BOTH) name = ['Item1', 'Item2', 'Item3'] ipcode = ['10', '25', '163'] for i in range(min(len(name), len(ipcode))): Treeview.insert('', i, values=(name[i], ipcode[i])) def treeview_sort_column(tv, col, reverse): l = [(tv.set(k, col), k) for k in tv.get_children('')] l.sort(reverse=reverse) for index, (val, k) in enumerate(l): tv.move(k, '', index) tv.heading(col, command=lambda: treeview_sort_column(tv, col, not reverse)) def set_cell_value(event): for item in Treeview.selection(): item_text = Treeview.item(item, "values") column = Treeview.identify_column(event.x) row = Treeview.identify_row(event.y) cn = int(str(column).replace('#', '')) rn = int(str(row).replace('I', '')) entryedit = Text(root, width=10 + (cn - 1) * 16, height=1) entryedit.place(x=16 + (cn - 1) * 130, y=6 + rn * 20) def saveedit(): Treeview.set(item, column=column, value=entryedit.get(0.0, "end")) entryedit.destroy() okb.destroy() okb = ttk.Button(root, text='OK', width=4, command=saveedit) okb.place(x=90 + (cn - 1) * 242, y=2 + rn * 20) def newrow(): name.append('to be named') ipcode.append('value') Treeview.insert('', len(name) - 1, values=(name[len(name) - 1], ipcode[len(name) - 1])) Treeview.update() newb.place(x=120, y=(len(name) - 1) * 20 + 45) newb.update() Treeview.bind('', set_cell_value) newb = ttk.Button(root, text='new item', width=20, command=newrow) newb.place(x=120, y=(len(name) - 1) * 20 + 45) for col in columns: Treeview.heading(col, text=col, command=lambda _col=col: treeview_sort_column(Treeview, _col, False)) root.mainloop() def ShowOptimalSettingsGui(): root = Tk() root.title(" ") root.geometry("700x500") root.config(bg="#5D6D7E") l2 = Label(root,bg="#5D6D7E",text="Выберите принтер") l2.place(x=10, y=20) prnt = ttk.Combobox(root,textvariable="123", values=['Ender3', 'Kossel Delta']) prnt.place(x=150, y=20) l2 = Label(root,bg="#5D6D7E",text="Выберите произв") l2.place(x=10, y=60) prnt2 = ttk.Combobox(root,textvariable="1123", values=['Fdplast', 'Filamentarno']) prnt2.place(x=150, y=60) l3 = Label(root,bg="#5D6D7E",text="Выберите Тип пластика") l3.place(x=10, y=100) prnt3 = ttk.Combobox(root,textvariable="11234", values=['pla', 'petg', 'abs']) prnt3.place(x=150, y=100) l2 = Label(root,bg="#5D6D7E",text="Выберите цвет") l2.place(x=10, y=140) prnt4 = ttk.Combobox(root,textvariable="1", values=['Голубой', 'Зелёгый']) prnt4.place(x=150, y=140) chc=ttk.Checkbutton(root,text="Выбрать оптимальные?") chc.place(x=100, y=170) # определяем данные для отображения people = [(209, 58, "57мм/cек", " "), (223, 75, "45мм/cек", "Проба прочности"), (211, 55, "57мм/cек", "Хорошая поверхность")] people2 = [(211, 59, "62мм/cек")] # определяем столбцы columns = ("tempSopl", "tempStol", "Speed", "addit") tree = ttk.Treeview(columns=columns, show="headings") tree.place( x=10, y=220) button_add = Button(root, text="Показать") button_add.place(x=10, y=170) # определяем заголовки с выпавниваем по левому краю tree.heading("tempSopl", text="Температура сопла", anchor=W) tree.heading("tempStol", text="Температура стола", anchor=W) tree.heading("Speed", text="Скорость печати", anchor=W) tree.heading("addit", text="Примечание", anchor=W) # настраиваем столбцы tree.column("#1", stretch=NO, width=200) tree.column("#2", stretch=NO, width=200) tree.column("#3", stretch=NO, width=200) tree.column("#4", stretch=NO, width=200) # добавляем данные for person in people: tree.insert("", END, values=person) root.mainloop() if __name__ == '__main__': main()