Files
danrazdipl/main.py
2023-06-20 20:51:44 +03:00

693 lines
20 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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="Вы успешно авторизировались в ситеме.")
ShowOptimalSettingsGui()
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():
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:
prDataFrame.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('<Double-1>', 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()