def test_dateentry_functions(self): widget = DateEntry(self.window, width=12, background='darkblue', foreground='white', borderwidth=2) widget.pack() self.window.update() widget.set_date(format_date(date(2018, 12, 31), 'short')) self.assertEqual(widget.get_date(), date(2018, 12, 31)) with self.assertRaises(ValueError): widget.set_date("ab") widget.set_date(date(2015, 12, 31)) self.assertEqual(widget.get_date(), date(2015, 12, 31)) self.assertEqual(widget.get(), format_date(date(2015, 12, 31), 'short')) widget.delete(0, "end") widget.insert(0, "abc") self.window.focus_force() self.assertEqual(widget.get_date(), date(2015, 12, 31)) widget._on_motion(TestEvent(x=10, y=20)) widget._on_b1_press(TestEvent(x=10, y=20)) widget._on_b1_press(TestEvent(x=widget.winfo_width() - 2, y=2)) widget._on_focus_out_cal(TestEvent(x=10, y=20)) widget.state(("disabled", )) self.window.update() self.assertIn("disabled", widget.state()) widget.drop_down() self.window.update() widget._select() self.window.update() widget.drop_down() self.window.update() widget.drop_down() self.window.update() widget.configure(state='readonly') self.window.update() widget._select() self.assertIn('readonly', widget.state())
def create_datepicker(self, label, filter_key, column): tk.Label(self, text=label).grid(row=0, column=column, sticky="W") container = tk.Frame(self) date_picker = DateEntry(container, date_pattern=Filters.DATE_PATTERN) date_picker.config(validate='none') date_picker.bind('<<DateEntrySelected>>', self.on_date_pick(filter_key)) date_picker.delete(0, tk.END) date_picker.grid(row=0, column=0) clear_btn = tk.Button( container, text="x", command=self.on_clear_date_click(date_picker, filter_key), ) clear_btn.grid(row=0, column=1, sticky="N") container.grid(row=1, column=column)
def edit_task(task): task_id = int(re.match(r"{'id': (?P<id>\d+)", task).groupdict()['id']) with open('db.txt', 'r+') as file: all_tasks = json.load(file) selected = list(filter(lambda x: x['id'] == task_id, all_tasks))[0] clear_view(tk) Label(tk, text="Enter your task name: ").grid(row=0, column=0, padx=20, pady=20) name = Entry(tk) name.delete(0, END) name.insert(0, selected['name']) name.grid(row=0, column=1, padx=20, pady=20) Label(tk, text="Due date: ").grid(row=1, column=0, padx=20, pady=20) date = DateEntry(tk) date.delete(0, END) date.insert(0, selected['date']) date.grid(row=1, column=1, padx=20, pady=20) Label(tk, text="Description: ").grid(row=2, column=0, padx=20, pady=20) description = ScrolledText(tk, width=20, height=10) description.insert(INSERT, selected['description']) description.insert(END, "") description.grid(row=2, column=1, padx=20, pady=20) Label(tk, text=f"Select priority, current is {mapper[selected['priority']] if selected['priority'] else None}").grid(row=3, column=0, padx=20, pady=20) s = IntVar() rad1 = Radiobutton(tk, text='Low', value=1, variable=s) rad2 = Radiobutton(tk, text='Medium', value=2, variable=s) rad3 = Radiobutton(tk, text='High', value=3, variable=s) rad1.grid(column=1, row=3) rad2.grid(column=2, row=3) rad3.grid(column=3, row=3) Label(tk, text="Check if completed: ").grid(row=4, column=0, padx=20, pady=20) Label(tk, text="Check if completed: ").grid(row=4, column=0, padx=20, pady=20) chk_state = BooleanVar() chk_state.set(selected["is_completed"]) # set check state chk = Checkbutton(tk, text='Choose', var=chk_state) chk.grid(column=1, row=4) Button(tk, text="Edit task", bg="yellow", fg="black", command=lambda: triger_edit(tk, selected, all_tasks, [name.get(), date.get(), description.get("1.0", END), s.get(), chk_state.get()])).grid(row=5, column=0) Button(tk, text="Cancel", bg="black", fg="white", command=lambda: main_view(tk)).grid(row=5, column=1, padx=100, pady=100)
def edit_task_view(tk, task): if task: task = get_task(task) clear_view(tk) task = task get_all_tasks() index = get_all_tasks().index(task) # window configuration tk.geometry("500x500") tk.title("Edit task") Label(tk, text="Enter your task name:").grid(row=0, column=0, padx=15, pady=25) name = Entry(tk, width=30) name.grid(row=0, column=1) name.insert(0, task['name']) # gets the name of the task and inserts it # date selector Label(tk, text="Due date:").grid(row=1, column=0, pady=25) date = DateEntry(tk) date.grid(row=1, column=1) date.delete(0, END) date.insert(0, task['date']) # gets the selected date and inserts it # description Label(tk, text="Description:").grid(row=2, column=0, pady=25) description = Text(tk, width=25, height=10) description.grid(row=2, column=1) description.insert(INSERT, task['description']) # gets description from the given task and insert it # priority Label(tk, text="Select priority:").grid(row=3, column=0, pady=25) priority = IntVar() current_priority = task['priority'] # gets what priority was selected # radio buttons for priority rb1 = Radiobutton(tk, text="Low", value=1, variable=priority) rb2 = Radiobutton(tk, text="Medium", value=2, variable=priority) rb3 = Radiobutton(tk, text="High", value=3, variable=priority) if current_priority == 1: # selects low priority if current_priority is low rb1.select() elif current_priority == 2: # selects low priority if current_priority is medium rb2.select() else: rb3.select() # selects low priority if current_priority is high rb1.grid(row=3, column=1) rb2.grid(row=3, column=2) rb3.grid(row=3, column=3) # is completed check button Label(tk, text="Check if completed:").grid(row=4, column=0, pady=25) is_completed = BooleanVar() is_completed.set(task['is_completed']) # gets info - is_completed from the task and marks the button if it is Checkbutton(tk, text="Choose", variable=is_completed).grid(row=4, column=1) Button(tk, text="Edit task", bg="yellow", command=lambda: edit_task(name=name.get(), date=date.get(), description=description.get('1.0', END), priority=priority.get(), is_completed=is_completed.get(), index=index)) \ .grid(row=5, column=0, pady=15) Button(tk, text="Cancel", bg="black", fg="white", command=lambda: view_tasks(tk)).grid(row=5, column=1) else: messagebox.showinfo("Error", "Please select a task!")
class checkout: def __init__(self, frame): self.mywindow = Toplevel(frame) self.mywindow.wm_title("Check Out") self.mywindow.geometry("800x300") t1 = Label(self.mywindow, text="Customer ID ") t2 = Label(self.mywindow, text="Customer Name ") t3 = Label(self.mywindow, text="Date of Check In ") t4 = Label(self.mywindow, text="Date of Check Out ") t5 = Label(self.mywindow, text="Resturant Balance ") t6 = Label(self.mywindow, text="Room Rent ") t7 = Label(self.mywindow, text="Mode of Payemt ") t8 = Label(self.mywindow, text="Advance Received ") t9 = Label(self.mywindow, text="Total Payable Amount ") self.e1 = Entry(self.mywindow) #Customer id self.e2 = Entry(self.mywindow) #Customer Name self.e3 = DateEntry(self.mywindow) #d Check in self.e4 = DateEntry(self.mywindow) #d check out self.e5 = Entry(self.mywindow) #resturant bill self.e6 = Entry(self.mywindow) # room bill self.e7 = Entry(self.mywindow) # Adv payment self.e8 = Entry(self.mywindow) # payable amt self.mop = StringVar() self.c1 = ttk.Combobox(self.mywindow, values=("Cash", "Cheque", "Debit Card", "Paytm"), textvariable=self.mop, state="readonly") self.c1.set(" Mode Of Payment") t1.place(x=50, y=50) t2.place(x=350, y=50) t3.place(x=50, y=80) t4.place(x=350, y=80) t5.place(x=50, y=110) t6.place(x=350, y=110) t7.place(x=50, y=140) t8.place(x=350, y=140) self.e1.place(x=180, y=50) self.e2.place(x=500, y=50) self.e3.place(x=180, y=80) self.e4.place(x=500, y=80) self.e5.place(x=180, y=110) self.e6.place(x=500, y=110) self.c1.place(x=180, y=140) self.e7.place(x=500, y=140) self.frame() self.e1.bind("<FocusIn>", lambda e: self.foucsin()) self.e1.bind("<FocusOut>", lambda e: self.getcustomerdetails()) self.c1.bind("<<ComboboxSelected>>", lambda e: self.get_items()) def get_items(self): # print(self.mop.get()) self.totalpayableamt = (float(self.e5.get()) + float(self.e6.get())) - float(self.e7.get()) if self.mop.get() in ("Debit Card", "Paytm"): disscount = self.totalpayableamt * 0.15 self.totalpayableamt -= disscount # print(str(totalpayableamt)) if self.mop.get() not in ("Debit Card", "Paytm"): print(str(self.totalpayableamt)) self.ttlamtframe() def getcustomerdetails(self): try: mydb = pymysql.connect(host='localhost', user='******', password='', db='hotelmanagementdb') with mydb.cursor() as myconn: myroomhistory = [] myconn.execute( "select room_type,customer_name,check_in,check_out,advance_payment,room_no,price_per_day from room_history where customer_id=%s", (self.e1.get())) mydb.commit() myroomhistory = myconn.fetchone() # print(type(myroomhistory)) # print(myroomhistory) self.roomtype = myroomhistory[0] self.e2.insert(0, myroomhistory[1]) self.e3.set_date(myroomhistory[2]) self.e4.set_date(myroomhistory[3]) self.e7.insert(0, myroomhistory[4]) self.myroomno = myroomhistory[5] self.myroomprice = myroomhistory[6] # print("Room rent: "+str(int(self.myroomprice))) self.calcroomrent() del myroomhistory myconn.execute( "select payable_amt from resturant_acc where customer_id=%s", (self.e1.get())) mydb.commit() myroomhistory = myconn.fetchone() print(type(myroomhistory)) print(myroomhistory) if myroomhistory is None: self.e5.insert(0, 0) else: self.e5.insert(0, myroomhistory[0]) self.e2.config(state="readonly") self.e3.config(state="readonly") self.e5.config(state="readonly") self.e7.config(state="readonly") except Exception as e: messagebox.showerror("DataBase Error ", "Error Occured Due to : " + str(e)) def update_room_status(self): try: mydb = pymysql.connect(host='localhost', user='******', password='', db='hotelmanagementdb') with mydb.cursor() as myconn: myconn.execute( "update room set status=%s where room_no=%s and room_type=%s", ("Available", self.myroomno, self.roomtype)) mydb.commit() except Exception as e: messagebox.showerror("DataBase Error ", "Error Occured Due to : " + str(e)) def update_customer_status(self): try: mydb = pymysql.connect(host='localhost', user='******', password='', db='hotelmanagementdb') with mydb.cursor() as mycon: mycon.execute( "update customer set status=%s where customer_id=%s", ("out", self.e1.get())) mydb.commit() except Exception as e: messagebox.showerror("Database Error", "Error Occured Due to " + str(e)) def calcroomrent(self): roomrent = 0 dayz = self.e4.get_date() - self.e3.get_date() stayday = str(dayz) index = stayday.find("day") # print(type(stayday)) # print("Stay days : "+stayday) # print("Days : "+stayday[0:index]) # print(self.roomtype) # print(self.myroomprice) # roomrent=int(stayday[0:index-1])*(int(self.myroomprice)) print("Room rent : " + str(int(self.myroomprice))) self.e6.insert(0, str((int(self.myroomprice)))) if self.roomtype == "Double": roomrent = int(stayday[0:index - 1]) * self.myroomprice self.e6.insert(0, str(roomrent)) # if self.roomtype == "Triple": # roomrent = int(stayday[0:index - 1]) * 750 # self.e6.insert(0, str(roomrent)) # if self.roomtype == "Quad": # roomrent = int(stayday[0:index - 1]) * 800 # self.e6.insert(0, str(roomrent)) self.e6.config(state="readonly") def frame(self): note = Frame(self.mywindow, border=2, relief=RAISED) t1 = Label( note, text= "get 15% discount on Every Transaction with Debit Card / Paytm", font=(32)) t1.pack() note.place(x=180, y=250) def ttlamtframe(self): self.note = Frame(self.mywindow, border=5, relief=RAISED) t1 = Label(self.note, text="Total Payable Amount is : ₹ " + str(self.totalpayableamt), font=(28)) t1.pack() self.note.place(x=250, y=180) self.note.bind("<Enter>", lambda e: self.enter(self.note)) self.note.bind("<Leave>", lambda e: self.leave(self.note)) t1.bind("<Button-1>", lambda e: self.billpaid()) def billpaid(self): try: billingdate = ("{}/{}/{}".format(datetime.datetime.now().year, datetime.datetime.now().month, datetime.datetime.now().day)) mydb = pymysql.connect(host='localhost', user='******', password='', db='hotelmanagementdb') with mydb.cursor() as myconn: myconn.execute( "insert into billpaid (customer_id,customer_name,date_of_payment,amt_pay) values (%s,%s,%s,%s)", (self.e1.get(), self.e2.get(), billingdate, str(self.totalpayableamt))) mydb.commit() self.clear_rec() messagebox.showinfo("Bill Payment", "Thank You \n Visit Again ", parent=self.mywindow) self.update_room_status() self.update_customer_status() except Exception as e: messagebox.showinfo("Database Error ", "Occured due to " + str(e), parent=self.mywindow) self.clear() def enter(event, obj): obj.config(bg="Blue") def leave(event, obj): obj.config(bg="red") def foucsin(self): print("in") self.e2.config(state="normal") self.e3.config(state="normal") self.e4.config(state="normal") self.e5.config(state="normal") self.e6.config(state="normal") self.e7.config(state="normal") self.e2.delete(0, END) self.e3.delete(0, END) self.e4.delete(0, END) self.e5.delete(0, END) self.e6.delete(0, END) self.e7.delete(0, END) self.c1.set("Mode Of Payment") def clear_rec(self): try: mydb = pymysql.connect(host='localhost', user='******', password='', db='hotelmanagementdb') with mydb.cursor() as myconn: myconn.execute("delete from room_history where customer_id=%s", (self.e1.get())) myconn.execute( "delete from resturant_acc where customer_id=%s", (self.e1.get())) mydb.commit() except Exception as e: messagebox.showerror("DataBase Error", "Error occured due to : " + str(e)) def clear(self): self.e2.config(state="normal") self.e3.config(state="normal") self.e4.config(state="normal") self.e5.config(state="normal") self.e6.config(state="normal") self.e7.config(state="normal") self.e1.delete(0, END) self.e2.delete(0, END) self.e3.delete(0, END) self.e4.delete(0, END) self.e5.delete(0, END) self.e6.delete(0, END) self.e7.delete(0, END) self.c1.set("Mode Of Payment")
class CashierRegistration: def __init__(self, master, *args, **kwargs): self.master = master self.heading = Label(master, text="Manage Cashier Details", font=("arial 30 bold"), fg="steelblue") self.heading.place(x=50, y=10) # labals and entries self.labal_cashier_id = Label(master, text="Cashier Id", font=("arial 15 bold")) self.labal_cashier_id.place(x=50, y=70) self.entry_cashier_id = Entry(master, width=20, font=("arial 15 bold")) self.entry_cashier_id.place(x=250, y=70) self.labal_cashier_name = Label(master, text="Cashier Name", font=("arial 15 bold")) self.labal_cashier_name.place(x=50, y=120) self.entry_cashier_name = Entry(master, width=20, font=("arial 15 bold")) self.entry_cashier_name.place(x=250, y=120) self.labal_cashier_username = Label(master, text="Cashier Username", font=("arial 15 bold")) self.labal_cashier_username.place(x=50, y=170) self.entry_cashier_username = Entry(master, width=20, font=("arial 15 bold")) self.entry_cashier_username.place(x=250, y=170) self.labal_cashier_password = Label(master, text="Cashier Password", font=("arial 15 bold")) self.labal_cashier_password.place(x=50, y=220) self.entry_cashier_password = Entry(master, width=20, font=("arial 15 bold")) self.entry_cashier_password.place(x=250, y=220) self.labal_cashier_dob = Label(master, text="Cashier DoB:", font=("arial 15 bold")) self.labal_cashier_dob.place(x=50, y=270) self.entry_cashier_dob = DateEntry(master, width=20, font=("arial 15 bold")) self.entry_cashier_dob.place(x=250, y=270) self.labal_cashier_address = Label(master, text="Cashier Address:", font=("arial 15 bold")) self.labal_cashier_address.place(x=50, y=320) self.entry_cashier_address = Entry(master, width=20, font=("arial 15 bold")) self.entry_cashier_address.place(x=250, y=320) self.labal_cashier_phone = Label(master, text="Cashier Phone", font=("arial 15 bold")) self.labal_cashier_phone.place(x=50, y=370) self.entry_cashier_phone = Entry(master, width=20, font=("arial 15 bold")) self.entry_cashier_phone.place(x=250, y=370) self.labal_cashier_email = Label(master, text="Cashier Email:", font=("arial 15 bold")) self.labal_cashier_email.place(x=50, y=420) self.entry_cashier_email = Entry(master, width=20, font=("arial 15 bold")) self.entry_cashier_email.place(x=250, y=420) self.labal_cashier_remarks = Label(master, text="Remarks:", font=("arial 15 bold")) self.labal_cashier_remarks.place(x=50, y=470) self.entry_cashier_remarks = Entry(master, width=20, font=("arial 15 bold")) self.entry_cashier_remarks.place(x=250, y=470) # button self.button_add = Button( master, text="Add", command=self.addCashier, font=("arial 13 bold"), width=8, height=1, bg="steelblue", fg="white", ) self.button_add.place(x=50, y=510) self.button_search = Button( master, text="Search", command=self.searchCashier, font=("arial 13 bold"), width=8, height=1, bg="steelblue", fg="white", ) self.button_search.place(x=155, y=510) self.button_update = Button( master, text="Update", command=self.updateCashier, font=("arial 13 bold"), width=8, height=1, bg="steelblue", fg="white", ) self.button_update.place(x=260, y=510) self.button_delete = Button( master, text="Delete", command=self.deleteCashier, font=("arial 13 bold"), width=8, height=1, bg="steelblue", fg="white", ) self.button_delete.place(x=365, y=510) #table for tha detail view of the propduct self.table_frame = Frame(master, width=820, height=490, bg="steelblue") self.table_frame.place(x=500, y=50) self.labal_id = Label(self.table_frame, text=("Cashier Id"), font=("arial 15 bold"), bg="steelblue", fg="black") self.labal_id.place(x=40, y=12) self.entry_cash_id = Entry(self.table_frame, width="10", font=("arial 15 bold"), bg="lightblue", fg="black") self.entry_cash_id.place(x=150, y=10) self.btn_show_detail = Button( self.table_frame, command=self.cashierDetail, text=" Show", width="7", height=1, font=("arial 12 bold"), bg="green", fg="black", ) self.btn_show_detail.place(x=300, y=10) self.btn_show_detailAll = Button( self.table_frame, command=self.cashierDetailAll, text=" Show All", width="7", height=1, font=("arial 12 bold"), bg="green", fg="black", ) self.btn_show_detailAll.place(x=430, y=10) self.labal_date_today = Label(self.table_frame, text="Today's Date:" + str(date), font=(" arial 14 bold"), bg="steelblue", fg="black") self.labal_date_today.place(x=600, y=20) self.trv_frame = Frame(master, width=800, height=420, bg="grey") self.trv_frame.place(x=510, y=100) self.horizontalScrollbar = ttk.Scrollbar(self.trv_frame, orient='horizontal') self.verticalScrollbar = ttk.Scrollbar(self.trv_frame, orient='vertical') self.trv = ttk.Treeview(self.trv_frame, height="20", xscrollcommand=self.horizontalScrollbar, yscrollcommand=self.verticalScrollbar) self.trv.place(x=20, y=50) self.trv['columns'] = ('Id', 'Name', 'Username', 'Password', 'BirthDate', 'Address', 'Phone', 'Email', 'Remarks', 'AddedOn', 'ModifiedOn') self.horizontalScrollbar.pack(fill=X, side=BOTTOM) self.verticalScrollbar.pack(fill=BOTH, side=RIGHT) self.horizontalScrollbar.configure(command=self.trv.xview) self.verticalScrollbar.configure(command=self.trv.yview) self.trv['show'] = 'headings' self.trv.column('Id', width=30, minwidth=20, anchor=tk.CENTER) self.trv.column('Name', width=70, minwidth=70, anchor=tk.CENTER) self.trv.column('Username', width=80, minwidth=50, anchor=tk.CENTER) self.trv.column('Password', width=80, minwidth=50, anchor=tk.CENTER) self.trv.column('BirthDate', width=80, minwidth=70, anchor=tk.CENTER) self.trv.column('Address', width=80, minwidth=70, anchor=tk.CENTER) self.trv.column('Phone', width=50, minwidth=40, anchor=tk.CENTER) self.trv.column('Email', width=60, minwidth=60, anchor=tk.CENTER) self.trv.column('Remarks', width=80, minwidth=60, anchor=tk.CENTER) self.trv.column('AddedOn', width=80, minwidth=60, anchor=tk.CENTER) self.trv.column('ModifiedOn', width=90, minwidth=60, anchor=tk.CENTER) self.trv.heading('Id', text='Id', anchor=tk.CENTER) self.trv.heading('Name', text='Name', anchor=tk.CENTER) self.trv.heading('Username', text='Username', anchor=tk.CENTER) self.trv.heading('Password', text='Password', anchor=tk.CENTER) self.trv.heading('BirthDate', text='Birth Date ', anchor=tk.CENTER) self.trv.heading('Address', text='Address', anchor=tk.CENTER) self.trv.heading('Phone', text='Phone', anchor=tk.CENTER) self.trv.heading('Email', text='Email', anchor=tk.CENTER) self.trv.heading('Remarks', text='Remarks', anchor=tk.CENTER) self.trv.heading('AddedOn', text='AddedOn', anchor=tk.CENTER) self.trv.heading('ModifiedOn', text='ModifiedOn.', anchor=tk.CENTER) self.trv.pack(fill=BOTH) self.cashierDetailAll() # text box self.textbox_text = Text(master, width=102, height=7) self.textbox_text.place(x=500, y=550) self.textbox_text.insert( END, "Cashier ID has reached upto:" + str(id) + " in the database.\n") def cashierDetail(self, *args, **kwargs): self.get_id = self.entry_cash_id.get() sql = "SELECT * FROM cashier WHERE cashier_id=? " c.execute(sql, (self.get_id, )) self.rows = c.fetchall() self.trv.delete(*self.trv.get_children()) if len(self.rows) != 0: self.i = 0 for row in self.rows: self.trv.insert('', self.i, text='', values=(row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10])) self.i += 1 else: tkinter.messagebox.showinfo( "Error!", "No Such Cashier Found in database.\nEnter correct cashier_id..." ) def cashierDetailAll(self, *args, **kwargs): self.entry_cash_id.delete(0, END) sql = "SELECT * FROM cashier " c.execute(sql) self.rows = c.fetchall() self.trv.delete(*self.trv.get_children()) if len(self.rows) != 0: self.i = 0 for row in self.rows: self.trv.insert('', self.i, text='', values=(row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10])) self.i += 1 conn.commit() def addCashier(self, *args, **kwargs): self.cashier_name = self.entry_cashier_name.get() self.cashier_username = self.entry_cashier_username.get() self.cashier_password = self.entry_cashier_password.get() self.cashier_dob = self.entry_cashier_dob.get() self.cashier_address = self.entry_cashier_address.get() self.cashier_phone = self.entry_cashier_phone.get() self.cashier_email = self.entry_cashier_email.get() self.cashier_remarks = self.entry_cashier_remarks.get() if self.cashier_name != '' and self.cashier_username != '' and self.cashier_password != '' and self.cashier_dob != "" and self.cashier_address != "" and self.cashier_phone != '' and self.cashier_email != "": sql = "INSERT INTO cashier(cashier_name,cashier_user_name,cashier_password,cashier_dob,cashier_address,cashier_phone, cashier_email,cashier_remarks,added_date) VALUES(?,?,?,?,?,?,?,?,?)" c.execute(sql, (self.cashier_name, self.cashier_username, self.cashier_password, self.cashier_dob, self.cashier_address, self.cashier_phone, self.cashier_email, self.cashier_remarks, date)) conn.commit() self.textbox_text.insert( END, "\n Inserted! " + str(self.cashier_name) + " into the database") tkinter.messagebox.showinfo( "Success!", "The Cashier Details Are Saved\nSuccessfully!") else: tkinter.messagebox.showinfo( "Error!", "Please Fill All Fields\n All Fields are Required") self.entry_cashier_id.delete(0, END) self.entry_cashier_name.delete(0, END) self.entry_cashier_username.delete(0, END) self.entry_cashier_password.delete(0, END) self.entry_cashier_dob.delete(0, END) self.entry_cashier_address.delete(0, END) self.entry_cashier_phone.delete(0, END) self.entry_cashier_email.delete(0, END) self.entry_cashier_remarks.delete(0, END) def searchCashier(self, *args, **kwargs): self.entry_cashier_name.delete(0, END) self.entry_cashier_username.delete(0, END) self.entry_cashier_password.delete(0, END) self.entry_cashier_dob.delete(0, END) self.entry_cashier_address.delete(0, END) self.entry_cashier_phone.delete(0, END) self.entry_cashier_email.delete(0, END) self.entry_cashier_remarks.delete(0, END) sql = "SELECT cashier_id FROM cashier" self.result = c.execute(sql).fetchall() if self.entry_cashier_id.get() != '' and [ self.result for self.result in self.result if self.result[0] == int(self.entry_cashier_id.get()) ]: sql = "SELECT * FROM cashier WHERE cashier_id=?" result = c.execute( sql, (self.entry_cashier_id.get()), ) for r in result: self.r1 = r[1] self.r2 = r[2] self.r3 = r[3] self.r4 = r[4] self.r5 = r[5] self.r6 = r[6] self.r7 = r[7] self.r8 = r[8] self.r9 = r[9] conn.commit() self.entry_cashier_name.delete(0, END) self.entry_cashier_name.insert(0, str(self.r1)) self.entry_cashier_username.delete(0, END) self.entry_cashier_username.insert(0, str(self.r2)) self.entry_cashier_password.delete(0, END) self.entry_cashier_password.insert(0, str(self.r3)) self.entry_cashier_dob.delete(0, END) self.entry_cashier_dob.insert(0, str(self.r4)) self.entry_cashier_address.delete(0, END) self.entry_cashier_address.insert(0, str(self.r5)) self.entry_cashier_phone.delete(0, END) self.entry_cashier_phone.insert(0, str(self.r6)) self.entry_cashier_email.delete(0, END) self.entry_cashier_email.insert(0, str(self.r6)) self.entry_cashier_remarks.delete(0, END) self.entry_cashier_remarks.insert(0, str(self.r8)) self.textbox_text.insert( END, "\n Searched!,\tCashier with id " + self.entry_cashier_id.get() + " in the database") else: self.entry_cashier_id.delete(0, END) tkinter.messagebox.showinfo( "Error!", "Wrong Cashier Id Format.\nCashier Id Format:Number.\nEnter Correct Cashier Id." ) def updateCashier(self, *args, **kwargs): self.cashier_name = self.entry_cashier_name.get() self.cashier_username = self.entry_cashier_username.get() self.cashier_password = self.entry_cashier_password.get() self.cashier_dob = self.entry_cashier_dob.get() self.cashier_address = self.entry_cashier_address.get() self.cashier_phone = self.entry_cashier_phone.get() self.cashier_email = self.entry_cashier_email.get() self.cashier_remarks = self.entry_cashier_remarks.get() if self.cashier_name != '' and self.cashier_username != '' and self.cashier_password != '' and self.cashier_dob != "" and self.cashier_address != "" and self.cashier_phone != '' and self.cashier_email != "": self.u1 = self.cashier_name self.u2 = self.cashier_username self.u3 = self.cashier_password self.u4 = self.cashier_dob self.u5 = self.cashier_address self.u6 = self.cashier_phone self.u7 = self.cashier_email self.u8 = self.cashier_remarks sql = "UPDATE cashier SET cashier_name=?,cashier_user_name=?,cashier_password=?,cashier_dob=?,cashier_address=?,cashier_phone=?,cashier_email=?,cashier_remarks=?,modified_date=? WHERE cashier_id=?" c.execute(sql, (self.u1, self.u2, self.u3, self.u4, self.u5, self.u6, self.u7, self.u8, date, self.entry_cashier_id.get())) self.textbox_text.insert( END, "\n Updated! " + str(self.u1) + " into the database") tkinter.messagebox.showinfo( "Success!,", "Successfully!!!\nThe Cashier Details are\nUpdated in Database!!!" ) conn.commit() else: tkinter.messagebox.showinfo( "Error!", "Before Updating,\nCashier Searching Required.") self.entry_cashier_id.delete(0, END) self.entry_cashier_name.delete(0, END) self.entry_cashier_username.delete(0, END) self.entry_cashier_password.delete(0, END) self.entry_cashier_dob.delete(0, END) self.entry_cashier_address.delete(0, END) self.entry_cashier_phone.delete(0, END) self.entry_cashier_email.delete(0, END) self.entry_cashier_remarks.delete(0, END) def deleteCashier(self, *args, **kwargs): sql = "SELECT cashier_id FROM cashier" self.result = c.execute(sql).fetchall() if self.entry_cashier_id.get() != '' and [ self.result for self.result in self.result if self.result[0] == int(self.entry_cashier_id.get()) ]: sql = "DELETE FROM cashier WHERE cashier_id=?" c.execute(sql, (self.entry_cashier_id.get(), )) self.textbox_text.insert( END, "\n Deleted!\tCashier with id " + self.entry_cashier_id.get() + " from the database") tkinter.messagebox.showinfo( "Success!,", "Successfully!!!\nThe Cashier Details are\nDeleted form Database!!!" ) conn.commit() else: tkinter.messagebox.showinfo( "Error!", " Before Deleting,\nCashier Searching Required.") self.entry_cashier_id.delete(0, END) self.entry_cashier_name.delete(0, END) self.entry_cashier_username.delete(0, END) self.entry_cashier_password.delete(0, END) self.entry_cashier_dob.delete(0, END) self.entry_cashier_address.delete(0, END) self.entry_cashier_phone.delete(0, END) self.entry_cashier_email.delete(0, END) self.entry_cashier_remarks.delete(0, END)
class Edit: def __init__(self, master, type): # build ui self.master = master self.type = type self.frame_1 = ttk.Frame(self.master) self.frame_4 = ttk.Frame(self.frame_1) self.treeview_1 = ttk.Treeview(self.frame_4) self.treeview_1.pack(side='left') self.frame_4.configure(height='200', width='200') self.frame_4.pack(expand='true', fill='x', padx='10', pady='10', side='top') self.frame_5 = ttk.Frame(self.frame_4) self.label_1 = ttk.Label(self.frame_5) self.label_1.configure(text='Dział', width='15') self.label_1.pack(padx='5', pady='5', side='left') self.combobox_1 = ttk.Combobox(self.frame_5, state="readonly") self.combobox_1.pack(expand='true', fill='x', side='left') self.combobox_1.bind('<<ComboboxSelected>>', self.fill_combobox2) self.frame_5.configure(height='200', width='200') self.frame_5.pack(expand='true', fill='x', side='top') self.frame_6 = ttk.Frame(self.frame_4) self.label_2 = ttk.Label(self.frame_6) self.label_2.configure(text='Nazwa', width='15') self.label_2.pack(padx='5', pady='5', side='left') self.combobox_2 = ttk.Combobox(self.frame_6, state="readonly") self.combobox_2.pack(expand='true', fill='x', side='left') self.frame_6.configure(height='200', width='200') self.frame_6.pack(expand='true', fill='x', side='top') self.frame_7 = ttk.Frame(self.frame_4) self.label_3 = ttk.Label(self.frame_7) self.label_3.configure(text='Cena hurtowa', width='15') self.label_3.pack(padx='3', pady='3', side='left') self.entry_5 = ttk.Entry(self.frame_7) self.entry_5.pack(expand='true', fill='x', side='left') self.frame_7.configure(height='200', width='200') self.frame_7.pack(expand='true', fill='x', side='top') self.frame_8 = ttk.Frame(self.frame_4) self.label_4 = ttk.Label(self.frame_8) self.label_4.configure(text='Ilość', width='15') self.label_4.pack(padx='3', pady='3', side='left') self.entry_6 = ttk.Entry(self.frame_8) self.entry_6.pack(expand='true', fill='x', side='left') self.frame_8.configure(height='200', width='200') self.frame_8.pack(expand='true', fill='x', side='top') self.frame_9 = ttk.Frame(self.frame_4) self.label_5 = ttk.Label(self.frame_9) self.label_5.configure(text='Cena netto', width='15') self.label_5.pack(padx='3', pady='3', side='left') self.entry_7 = ttk.Entry(self.frame_9) self.entry_7.pack(expand='true', fill='x', side='left') self.frame_9.configure(height='200', width='200') self.frame_9.pack(expand='true', fill='x', side='top') self.frame_10 = ttk.Frame(self.frame_4) self.label_6 = ttk.Label(self.frame_10) self.label_6.configure(text='Procent VAT', width='15') self.label_6.pack(padx='3', pady='3', side='left') self.entry_8 = ttk.Entry(self.frame_10) self.entry_8.pack(expand='true', fill='x', side='left') self.frame_10.configure(height='200', width='200') self.frame_10.pack(expand='true', fill='x', side='top') self.frame_11 = ttk.Frame(self.frame_4) self.label_7 = ttk.Label(self.frame_11) self.label_7.configure(text='Data', width='15') self.label_7.pack(padx='3', pady='3', side='left') self.dateEntry = DateEntry(self.frame_11, width=12, background='darkblue', locale="pl_PL", date_pattern="yyyy-mm-dd", foreground='white', borderwidth=2) self.dateEntry.delete(0, END) self.dateEntry.pack(expand='true', fill='x', side='left') self.frame_11.configure(height='200', width='200') self.frame_11.pack(expand='true', fill='x', side='top') self.frame_12 = ttk.Frame(self.frame_4) self.button_3 = ttk.Button(self.frame_12) self.button_3.configure(text='Filtruj') self.button_3.bind('<Button>', self.filter) self.button_3.pack(expand='true', fill='x', side='left') self.button_4 = ttk.Button(self.frame_12) self.button_4.configure(text='Wyczyść') self.button_4.bind('<Button>', self.clear) self.button_4.pack(expand='true', fill='x', side='left') self.frame_12.configure(height='200', width='200') self.frame_12.pack(expand='true', fill='x', side='top', padx='3') self.frame_1.configure(height='200', width='200') self.frame_1.pack(side='top') self.id = None if self.type == 0: self.treeview_1['columns'] = ('ID', 'Nazwa', 'Cena netto', 'Procent VAT', 'Dział') self.treeview_1.column("#0", width=0) self.treeview_1.column('ID', width=30) self.treeview_1.column('Nazwa', width=130) self.treeview_1.column('Cena netto', width=80) self.treeview_1.column('Procent VAT', width=80) self.treeview_1.column('Dział', width=150) self.treeview_1.heading("#0", text='', anchor="w") self.treeview_1.heading('ID', text='ID') self.treeview_1.heading('Nazwa', text='Nazwa') self.treeview_1.heading('Cena netto', text='Cena netto') self.treeview_1.heading('Procent VAT', text='Procent VAT') self.treeview_1.heading('Dział', text='Dział') self.add_items(DB_Connection.select_products()) self.treeview_1.bind('<<TreeviewSelect>>', self.on_select_products) self.entry_5.config(state='disabled') self.entry_6.config(state='disabled') self.dateEntry.config(state='disabled') self.frame_2 = ttk.Frame(self.frame_1) self.entry_1 = ttk.Entry(self.frame_2) self.entry_1.pack(expand='true', fill='x', ipadx='8', ipady='8', padx='2', pady='2', side='left') self.entry_2 = ttk.Entry(self.frame_2) self.entry_2.pack(expand='true', fill='x', ipadx='8', ipady='8', padx='2', pady='2', side='left') self.entry_3 = ttk.Entry(self.frame_2) self.entry_3.pack(expand='true', fill='x', ipadx='8', ipady='8', padx='2', pady='2', side='left') self.entry_4 = ttk.Entry(self.frame_2) self.entry_4.pack(expand='true', fill='x', ipadx='8', ipady='8', padx='2', pady='2', side='left') self.frame_2.configure(height='200', width='200') self.frame_2.pack(fill='x', side='top') elif self.type == 1: self.treeview_1['columns'] = ('ID', 'Data', 'Nazwa', 'Cena hurtowa', 'Ilość', 'Dział') self.treeview_1.column("#0", width=0) self.treeview_1.column('ID', width=30) self.treeview_1.column('Data', width=80) self.treeview_1.column('Nazwa', width=130) self.treeview_1.column('Cena hurtowa', width=100) self.treeview_1.column('Ilość', width=80) self.treeview_1.column('Dział', width=150) self.treeview_1.heading("#0", text='', anchor="w") self.treeview_1.heading('ID', text='ID') self.treeview_1.heading('Data', text='Data') self.treeview_1.heading('Nazwa', text='Nazwa') self.treeview_1.heading('Cena hurtowa', text='Cena hurtowa') self.treeview_1.heading('Ilość', text='Ilość') self.treeview_1.heading('Dział', text='Dział') self.add_items(DB_Connection.select_supplies()) self.treeview_1.bind('<<TreeviewSelect>>', self.on_select_supplies) self.entry_7.config(state='disabled') self.entry_8.config(state='disabled') self.frame_2 = ttk.Frame(self.frame_1) self.entry_1 = ttk.Entry(self.frame_2) self.entry_1.pack(expand='true', fill='x', ipadx='8', ipady='8', padx='2', pady='2', side='left') self.entry_2 = ttk.Entry(self.frame_2) self.entry_2.pack(expand='true', fill='x', ipadx='8', ipady='8', padx='2', pady='2', side='left') self.frame_2.configure(height='200', width='200') self.frame_2.pack(fill='x', side='top') elif self.type == 2: self.treeview_1['columns'] = ('ID', 'Data', 'Nazwa', 'Ilość', 'Dział') self.treeview_1.column("#0", width=0) self.treeview_1.column('ID', width=30) self.treeview_1.column('Data', width=80) self.treeview_1.column('Nazwa', width=130) self.treeview_1.column('Ilość', width=80) self.treeview_1.column('Dział', width=150) self.treeview_1.heading("#0", text='', anchor="w") self.treeview_1.heading('ID', text='ID') self.treeview_1.heading('Data', text='Data') self.treeview_1.heading('Nazwa', text='Nazwa') self.treeview_1.heading('Ilość', text='Ilość') self.treeview_1.heading('Dział', text='Dział') self.add_items(DB_Connection.select_sales()) self.treeview_1.bind('<<TreeviewSelect>>', self.on_select_sales) self.entry_5.config(state='disabled') self.entry_7.config(state='disabled') self.entry_8.config(state='disabled') self.frame_2 = ttk.Frame(self.frame_1) self.entry_1 = ttk.Entry(self.frame_2) self.entry_1.pack(expand='true', fill='x', ipadx='8', ipady='8', padx='2', pady='2', side='left') self.frame_2.configure(height='200', width='200') self.frame_2.pack(fill='x', side='top') self.frame_3 = ttk.Frame(self.frame_1) self.button_1 = ttk.Button(self.frame_3) self.button_1.configure(text='Edytuj') self.button_1.pack(expand='true', fill='x', ipadx='3', ipady='3', side='top') self.button_1.bind('<Button>', self.edit) self.button_2 = ttk.Button(self.frame_3) self.button_2.configure(text='Usuń') self.button_2.pack(expand='true', fill='x', ipadx='3', ipady='3', side='top') self.button_2.bind('<Button>', self.delete) self.frame_3.configure(height='200', width='200') self.frame_3.pack(fill='x', side='top') self.frame_1.configure(height='200', padding='8', width='200') self.frame_1.pack(side='top') # Main widget self.mainwindow = self.frame_1 if self.type == 0: a, b = 720, 349 elif self.type == 1: a, b = 839, 346 else: a, b = 739, 346 x = self.master.winfo_screenwidth() // 2 - a // 2 - 10 y = self.master.winfo_screenheight() // 2 - b // 2 - 10 self.master.geometry(f'+{x}+{y}') self.master.title('Edytuj') def fill_combobox1(self): self.combobox_1['values'] = DB_Connection.get_sections() def fill_combobox2(self, event): self.combobox_2['values'] = DB_Connection.get_products( self.combobox_1['values'][self.combobox_1.current()]) def filter(self, event): params = {} params['Products.section'], params['Products.name'], params['Data.quantity_price'], params['Data.amount'], params['Products.netto_price'], params['Products.vat_percentage'], params['Data.date'] = \ self.combobox_1.get(), self.combobox_2.get(), self.entry_5.get(), self.entry_6.get(), self.entry_7.get(), self.entry_8.get(), self.dateEntry.get_date().strftime('%Y-%m-%d') if self.dateEntry._validate_date() else "" print(params) filtered_grid = DB_Connection.select_with_filters(self.type, params) print(filtered_grid) self.treeview_1.delete(*self.treeview_1.get_children()) self.add_items(filtered_grid) def clear(self, event): self.combobox_1.set('') self.combobox_2.set('') self.entry_5.delete(0, END) self.entry_6.delete(0, END) self.entry_7.delete(0, END) self.entry_8.delete(0, END) self.dateEntry.delete(0, END) def add_items(self, records): for r in records: self.treeview_1.insert("", "end", values=r) def edit(self, event): if self.id is not None and self.treeview_1.selection() != (): import Product as P pr = P.Product(*DB_Connection.get_settings()) if self.type == 0: pr.Name = (self.entry_1.get(), self.master) pr.Netto_price = (self.entry_2.get(), self.master) pr.Vat_percentage = (self.entry_3.get(), self.master) pr.Section = (self.entry_4.get(), self.master) if pr.final_prod_check( [pr.Section, pr.Name, pr.Netto_price, pr.Vat_percentage]): DB_Connection.edit_product(self.master, pr, self.id) focused = self.treeview_1.focus() self.treeview_1.insert( "", str(focused)[1:], values=(self.id, pr.Name, pr.Netto_price, pr.Vat_percentage, pr.Section)) self.treeview_1.delete(focused) elif self.type == 1: pr.Quantity_price = (self.entry_1.get(), self.master) pr.Amount = (self.entry_2.get(), self.master) if pr.final_prod_check([pr.Quantity_price, pr.Amount]): DB_Connection.edit_supply(self.master, pr, self.id) focused = self.treeview_1.focus() item = self.treeview_1.item(focused)['values'] self.treeview_1.insert("", str(focused)[1:], values=(self.id, item[1], item[2], pr.Quantity_price, pr.Amount, item[5])) self.treeview_1.delete(focused) else: pr.Amount = (self.entry_1.get(), self.master) if pr.final_prod_check([pr.Amount]): DB_Connection.edit_sale(self.master, pr, self.id) focused = self.treeview_1.focus() item = self.treeview_1.item(focused)['values'] self.treeview_1.insert("", str(focused)[1:], values=(self.id, item[1], item[2], pr.Amount, item[4])) self.treeview_1.delete(focused) else: messagebox.showerror( parent=self.master, title='Błąd', message='Zaznacz element, który chcesz edytować') def delete(self, event): if self.id is not None and self.treeview_1.selection() != (): if self.type == 0: DB_Connection.delete_product(self.id) else: DB_Connection.delete_supply_or_sale(self.id) focused = self.treeview_1.focus() self.treeview_1.delete(focused) else: messagebox.showerror( parent=self.master, title='Błąd', message='Zaznacz element, który chcesz usunąć') def on_select_products(self, event): selected = event.widget.focus() self.entry_1.delete(0, END) self.entry_2.delete(0, END) self.entry_3.delete(0, END) self.entry_4.delete(0, END) item = self.treeview_1.item(selected)['values'] self.id = item[0] self.entry_1.insert(0, item[1]) self.entry_2.insert(0, item[2]) self.entry_3.insert(0, item[3]) self.entry_4.insert(0, item[4]) def on_select_supplies(self, event): selected = event.widget.focus() self.entry_1.delete(0, END) self.entry_2.delete(0, END) item = self.treeview_1.item(selected)['values'] self.id = item[0] self.entry_1.insert(0, item[3]) self.entry_2.insert(0, item[4]) def on_select_sales(self, event): selected = event.widget.focus() self.entry_1.delete(0, END) item = self.treeview_1.item(selected)['values'] self.id = item[0] self.entry_1.insert(0, item[3]) def run(self): self.mainwindow.mainloop()
def open_new_rule_dialog(): # Toplevel object which will # be treated as a new window global rule_dialog rule_dialog = Toplevel(root) # sets the title of the # Toplevel widget rule_dialog.title("Portfolio App - Sukurti naują taisyklę") rule_dialog.iconbitmap( 'C:\PythonPrograms\Bakalauro Baigiamasis Darbas\LSTM stock price prediction\money.ico' ) # sets the geometry of toplevel rule_dialog.geometry("450x400") # A Label widget to show in toplevel Label(rule_dialog, text="Pasirinkta įmonė: ").grid(sticky="w", row=0, column=0, padx=10, pady=10) global company_name company_name = Entry(rule_dialog, width=30, borderwidth=2) company_name.insert(0, get_selected_company()) company_name.grid(sticky="w", row=0, column=1, padx=(0, 10), pady=10) Label(rule_dialog, text="Pasirinkta investavimo strategija: ").grid(sticky="w", row=1, column=0, padx=10, pady=10) options = [ "LSTM Rekurentinis Neuroninis Tinklas", "Fibonacci Retracement Lygiai", "Vėžlių Prekyba", "Ilgalaikė investicija" ] global clicked clicked = StringVar() clicked.set(options[0]) drop = OptionMenu(rule_dialog, clicked, *options) drop.grid(sticky="w", row=1, column=1, padx=(0, 10), pady=10) Label(rule_dialog, text="Data nuo: ").grid(sticky="w", row=2, column=0, padx=10, pady=10) start_date = DateEntry(rule_dialog, width=12, background='darkblue', foreground='white', borderwidth=2, date_pattern='yyyy-mm-dd') start_date.grid(sticky="w", row=2, column=1, padx=(0, 10), pady=10) start_date.delete(0, END) start_date.insert(0, '2012-01-01') Label(rule_dialog, text="Data iki: ").grid(sticky="w", row=3, column=0, padx=10, pady=10) end_date = DateEntry(rule_dialog, width=12, background='darkblue', foreground='white', borderwidth=2, date_pattern='yyyy-mm-dd') end_date.grid(sticky="w", row=3, column=1, padx=(0, 10), pady=10) end_date.delete(0, END) end_date.insert(0, '2021-05-21') chooseStrategyButton = Button( rule_dialog, text="Įtraukti taisyklę", command=lambda: select_rule(company_name.get(), clicked.get(), start_date.get(), end_date.get())) chooseStrategyButton.grid(row=4, column=0, columnspan=2, padx=10, pady=10)
class Frequencia(object): IMGDIR = os.path.join(os.path.dirname(__file__), 'imagens') def __init__(self, root, model): self.toplevel = root self.toplevel.title('Controle de Frequência') self.modelo = model() self.operacao = 'Browse' self.info_label = StringVar() """Configuração inicial dos radiobutton""" self.presenca = StringVar() self.PRESENCA = [("Presente", "P"), ("Ausente", "F"), ("Justificada", "J")] self.presenca.set("P") self.ANO = [2019, 2020, 2021, 2022] """Estilos""" style = ttk.Style() style.configure("BW.TLabel", padding=6, foreground="white", background="brown", font=('helvetica', 9, 'bold')) style.configure("BW.TEntry", padding=6, background="#ccc", relief="flat") #opcoes combobox -column, -columnspan, -in, -ipadx, -ipady, -padx, -pady, -row, -rowspan, or -sticky style.configure("BW.TCombo", ipady=5, relief="flat") style.configure("BW.TButton", padding=6, relief="flat", background="#ccc") style.configure('BW.Treeview', highlightthickness=0, bd=0, font=('Calibri', 11)) style.configure("BW.Treeview.Heading", background="blue", foreground="brown", relief="flat") style.configure("BW.TDataentry", fieldbackground='light green', background='dark green', foreground='dark blue', arrowcolor='white') """Imagens para os botões""" self.btnNewImage = PhotoImage(file=self.IMGDIR + '\\new.png').subsample(3, 3) self.btnDelImage = PhotoImage(file=self.IMGDIR + '\\del.png').subsample(3, 3) self.btnSaveImage = PhotoImage(file=self.IMGDIR + '\\disk_save.png').subsample(3, 3) self.btnCancelImage = PhotoImage(file=self.IMGDIR + '\\cancel.png').subsample(3, 3) self.btnLoopImage = PhotoImage( file=self.IMGDIR + '\\iconfinder_refresh_326679.png').subsample( 3, 3) self.btnCloseImage = PhotoImage( file=self.IMGDIR + '\\iconfinder_icons_exit2_1564506.png').subsample(3, 3) self.searchFrame = ttk.Frame(self.toplevel) self.searchFrame.grid(column=0, row=0, padx=10, pady=10, columnspan=2) self.tableFrame = ttk.Frame(self.toplevel) self.tableFrame.grid(column=0, row=1, padx=10, pady=10) self.formFrame = ttk.LabelFrame(self.toplevel, text='Informações') self.formFrame.grid(column=1, row=1, padx=10, pady=10) self.statusFrame = ttk.Frame(self.toplevel, border=1, relief=FLAT) self.statusFrame.grid(column=0, row=2, padx=10, pady=10, columnspan=2) root.grid_rowconfigure(2, weight=1) root.grid_columnconfigure(1, weight=1) self.createtable() self.createsearch() self.createform() self.createBarraStatus() self.estadoBotoes() def createform(self): self.container1 = Frame(self.formFrame) self.container1['pady'] = 10 self.container1.grid(row=1, column=0) self.lblCadastro = ttk.Label(self.container1, style="BW.TLabel", text="Cadastro:", width=12) self.lblCadastro.pack(side=LEFT) self.txtCadastro = ttk.Entry(self.container1, style="BW.TEntry") self.txtCadastro['state'] = DISABLED self.txtCadastro['width'] = 20 self.txtCadastro.pack(side=LEFT, padx=(10, 5)) self.container2 = Frame(self.formFrame) self.container2['pady'] = 10 self.container2.grid(row=2, column=0) self.lblReuniao = ttk.Label(self.container2, style="BW.TLabel", text="Data Reunião:", width=12) self.lblReuniao.pack(side=LEFT) # self.txtReuniao = ttk.Entry(self.container2, style="BW.TEntry") # self.txtReuniao['width'] = 20 # self.txtReuniao['state'] = DISABLED # self.txtReuniao.pack(side=LEFT, padx=(10, 5)) # self.txtReuniao.bind("<FocusOut>", self.formatadata) self.txtReuniao = DateEntry(self.container2, width=11, background='darkblue', foreground='white', borderwidth=2, year=2019, locale='pt_BR', date_pattern='yyyy-MM-dd') self.txtReuniao.pack(side=LEFT, ipadx=25, padx=(10, 5)) self.container3 = Frame(self.formFrame) self.container3['pady'] = 10 self.container3.grid(row=3, column=0) for text, mode in self.PRESENCA: self.rdbPresenca = Radiobutton(self.container3, text=text, variable=self.presenca, value=mode) self.rdbPresenca.pack(anchor=W, side=LEFT, expand=1) """ Cria os botões de ações """ self.container4 = ttk.Frame(self.formFrame) self.container4.grid(row=4, column=0, pady=10) self.btnNew = ttk.Button(self.container4, style="BW.TButton", compound=LEFT) self.btnNew['text'] = 'Nova' self.btnNew['width'] = 5 self.btnNew['command'] = self.cadastraFrequencia self.btnNew['image'] = self.btnNewImage self.btnNew.pack(side=LEFT, padx=10, pady=10) self.btnExcluir = ttk.Button(self.container4, style="BW.TButton", compound=LEFT) self.btnExcluir['text'] = 'Excluir' self.btnExcluir['width'] = 6 self.btnExcluir['command'] = self.excluirFrequencia self.btnExcluir['image'] = self.btnDelImage self.btnExcluir.pack(side=LEFT, padx=10, pady=10) self.btnSave = ttk.Button(self.container4, style="BW.TButton", compound=LEFT) self.btnSave['text'] = 'Salvar' self.btnSave['width'] = 6 self.btnSave['command'] = self.saveFrequencia self.btnSave['image'] = self.btnSaveImage self.btnSave.pack(side=LEFT, padx=10, pady=10) self.btnCancel = ttk.Button(self.container4, style="BW.TButton", compound=LEFT) self.btnCancel['text'] = 'Cancelar' self.btnCancel['width'] = 8 self.btnCancel['command'] = self.cancelaFrequencia self.btnCancel['image'] = self.btnCancelImage self.btnCancel.pack(side=LEFT, padx=10, pady=10) def createtable(self): self.tree = ttk.Treeview(self.tableFrame, column=(1, 2, 3), show="headings", selectmode='browse') self.tree['style'] = "BW.Treeview" self.tree.grid(row=0, column=0, columnspan=2, sticky='nsew') self.tree.heading(1, text='#') self.tree.heading(2, text='Data') self.tree.heading(3, text='Frequência') self.tree.column(1, width=50, anchor='center') self.tree.column(2, width=100, anchor='center') self.tree.column(3, width=150, anchor='center') self.tree.bind('<Double-Button-1>', self.EditMember) #clique duplo self.tree.bind('<Button-1>', self.navega) self.scroll = ttk.Scrollbar(self.tableFrame, orient=VERTICAL) self.scroll.grid(row=0, column=3, sticky='ns') self.tree.config(yscrollcommand=self.scroll.set) self.scroll.config(command=self.tree.yview) def createsearch(self): self.label = ttk.Label(self.searchFrame, text='Pesquisa: ', style='BW.TLabel', compound=LEFT) self.label.grid(column=0, row=0, padx=(5, 5)) self.cbxData = ttk.Combobox(self.searchFrame, values=self.ANO) self.cbxData.current(0) self.cbxData.grid(row=0, column=1, ipady=5) self.txtSearch = ttk.Entry(self.searchFrame, style="BW.TEntry") self.txtSearch.focus_set() self.txtSearch.grid(row=0, column=2, columnspan=4, sticky=W, ipadx=50, padx=(10, 5)) #fazer o bind para a statusbar self.txtSearch.bind( "<FocusIn>", lambda event: self.statuscommand( 'Entre com o número do cadastro.')) self.btnSearch = ttk.Button(self.searchFrame, style="BW.TButton", compound=LEFT) self.btnSearch['text'] = 'Localizar' self.btnSearch['width'] = 10 self.btnSearch['command'] = self.localizarmember self.btnSearch.grid(row=0, column=6, padx=(10, 5)) def createBarraStatus(self): self.lblMessage = ttk.Label(self.statusFrame, textvar=self.info_label, relief=SUNKEN) self.lblMessage.pack(expand=1, fill=X, pady=10, padx=5) def statuscommand(self, texto): self.info_label.set(texto) def localizarmember(self): md = self.modelo valor = self.txtSearch.get() md.num_cadastro = valor md.ano = self.cbxData.get() lista = md.getmember() try: if len(lista) == 0: items = self.tree.get_children() self.operacao = 'Browse' for item in items: self.tree.delete(item) else: items = self.tree.get_children() for item in items: self.tree.delete(item) for row in lista: self.tree.insert('', 'end', values=(row[0], row[1], row[2])) self.txtCadastro.insert(0, self.txtSearch.get()) self.operacao = 'Insert' self.estadoBotoes() except: self.mensagem( 'Aviso', 'O registro de cadastro nº{} não foi localizado.\nOu não há registro para o ano informado.' .format(valor)) def reloadTable(self): md = self.modelo md.num_cadastro = self.txtSearch.get() md.ano = self.cbxData.get() lista = md.getmember() items = self.tree.get_children() for item in items: self.tree.delete(item) for row in lista: self.tree.insert('', 'end', values=(row[0], row[1], row[2])) def navega(self, event): self.operacao = 'Delete' self.estadoBotoes() def EditMember(self, event): selection = self.tree.selection() for selection in self.tree.selection(): currentItem = self.tree.set(selection, "#1") if currentItem: lista = self.modelo.getById(currentItem) for row in lista: self.id = row[0] self.txtReuniao['state'] = NORMAL self.txtCadastro.delete(0, END) self.txtCadastro.insert(0, row[1]) self.txtReuniao.delete(0, END) self.txtReuniao.insert(0, row[2]) self.presenca.set(row[3]) self.operacao = 'Edit' self.estadoBotoes() return """Outras funções""" def saveFrequencia(self): md = self.modelo selection = self.tree.selection() for selection in self.tree.selection(): currentItem = self.tree.set(selection, "#1") if currentItem: md.id = currentItem if self.txtCadastro.get() == '': md.num_cadastro = self.txtSearch.get() else: md.num_cadastro = self.txtCadastro.get() md.data_reuniao = self.txtReuniao.get() md.presenca = self.presenca.get() md.ano = self.pegaano(self.txtReuniao.get()) self.mensagem('Incluir/Alterar', md.savefrequencia(self.operacao)) self.txtReuniao.delete(0, END) self.txtReuniao['state'] = DISABLED self.operacao = 'Insert' self.estadoBotoes() self.reloadTable() def excluirFrequencia(self): selection = self.tree.selection() for selection in self.tree.selection(): currentItem = self.tree.set(selection, "#1") if currentItem: lista = self.modelo.delete(currentItem) self.mensagem('Delete', lista) #self.createtable() self.reloadTable() self.operacao = 'Delete' self.estadoBotoes() break else: self.error('Aviso', 'Você deve selecionar um item primeiro.') def cancelaFrequencia(self): self.operacao = 'Delete' self.estadoBotoes() def cadastraFrequencia(self): #limpa as caixas de texto self.txtReuniao.delete(0, END) self.txtReuniao['state'] = NORMAL self.operacao = 'Novo' self.estadoBotoes() def estadoBotoes(self): if self.operacao == 'Browse': self.btnNew['state'] = DISABLED self.btnExcluir['state'] = DISABLED self.btnSave['state'] = DISABLED self.btnCancel['state'] = DISABLED elif self.operacao == 'Insert': self.btnNew['state'] = NORMAL self.btnExcluir['state'] = DISABLED self.btnSave['state'] = DISABLED self.btnCancel['state'] = DISABLED elif self.operacao == 'Novo': self.btnNew['state'] = DISABLED self.btnExcluir['state'] = DISABLED self.btnSave['state'] = NORMAL self.btnCancel['state'] = NORMAL elif self.operacao == 'Delete': self.btnNew['state'] = NORMAL self.btnExcluir['state'] = NORMAL self.btnSave['state'] = DISABLED self.btnCancel['state'] = DISABLED elif self.operacao == 'Edit': self.btnNew['state'] = DISABLED self.btnExcluir['state'] = DISABLED self.btnSave['state'] = NORMAL self.btnCancel['state'] = NORMAL def exitForm(self): self.toplevel.destroy() def mensagem(self, tipo, msg): messagebox.showinfo(tipo, msg) def error(self, tipo, msg): messagebox.showwarning(tipo, msg) def validate_text(self, texto): if len(texto) == 0: return False else: return True def pegaano(self, ano): ano = ano.split('-') return ano[0]
class ManageProduct: def __init__(self, master, *args, **kwargs): self.master = master self.heading = Label(master, text="Manage Product Details", font=("arial 30 bold"), fg="steelblue") self.heading.place(x=50, y=10) # labals self.labal_product_id = Label(master, text="Product Id", font=("arial 15 bold")) self.labal_product_id.place(x=50, y=70) self.labal_product_name = Label(master, text="Name of Product", font=("arial 15 bold")) self.labal_product_name.place(x=50, y=120) self.labal_number_of_stocks = Label(master, text="Number of Stock", font=("arial 15 bold")) self.labal_number_of_stocks.place(x=50, y=170) self.labal_cost_price = Label(master, text="Cost price Per Unit", font=("arial 15 bold")) self.labal_cost_price.place(x=50, y=220) self.labal_vender_name = Label(master, text="Vender's Name", font=("arial 15 bold")) self.labal_vender_name.place(x=50, y=270) self.labal_venderphone = Label(master, text="Vender's Phone", font=("arial 15 bold")) self.labal_venderphone.place(x=50, y=320) self.labal_manufacture_date = Label(master, text="Manufacture Date", font=("arial 15 bold")) self.labal_manufacture_date.place(x=50, y=370) self.labal_expiry_date = Label(master, text="Expiry Date", font=("arial 15 bold")) self.labal_expiry_date.place(x=50, y=420) self.labal_maximum_retail_price = Label(master, text="Max. Retail Price", font=("arial 15 bold")) self.labal_maximum_retail_price.place(x=50, y=470) self.labal_marked_price = Label(master, text="Marked Price", font=("arial 15 bold")) self.labal_marked_price.place(x=50, y=520) self.labal_remarks = Label(master, text="Remarks", font=("arial 15 bold")) self.labal_remarks.place(x=50, y=570) #entry self.entry_product_id = Entry(master, width=20, font=("arial 15 bold")) self.entry_product_id.place(x=250, y=70) self.entry_product_name = Entry(master, width=20, font=("arial 15 bold")) self.entry_product_name.place(x=250, y=120) self.entry_number_of_stocks = Entry(master, width=20, font=("arial 15 bold")) self.entry_number_of_stocks.place(x=250, y=170) self.entry_cost_price = Entry(master, width=20, font=("arial 15 bold")) self.entry_cost_price.place(x=250, y=220) self.entry_vender_name = Entry(master, width=20, font=("arial 15 bold")) self.entry_vender_name.place(x=250, y=270) self.entry_vender_phone = Entry(master, width=20, font=("arial 15 bold")) self.entry_vender_phone.place(x=250, y=320) self.entry_manufacture_date = DateEntry(master, width=20, font=("arial 15 bold")) self.entry_manufacture_date.place(x=250, y=370) self.entry_expiry_date = DateEntry(master, width=20, font=("arial 15 bold")) self.entry_expiry_date.place(x=250, y=420) self.entry_maximum_retail_price = Entry(master, width=20, font=("arial 15 bold")) self.entry_maximum_retail_price.place(x=250, y=470) self.entry_marked_price = Entry(master, width=20, font=("arial 15 bold")) self.entry_marked_price.place(x=250, y=520) self.entry_remarks = Entry(master, width=20, font=("arial 15 bold")) self.entry_remarks.place(x=250, y=570) # button self.button_add = Button(master, text="Add", font=("arial 13 bold"), width=8, height=1, bg="steelblue", fg="white", command=self.addProduct) self.button_add.place(x=50, y=640) self.button_add = Button(master, text="Search", font=("arial 13 bold"), width=8, height=1, bg="steelblue", fg="white", command=self.searchProduct) self.button_add.place(x=155, y=640) self.button_add = Button(master, text="Update", font=("arial 13 bold"), width=8, height=1, bg="steelblue", fg="white", command=self.updateProduct) self.button_add.place(x=260, y=640) self.button_add = Button(master, text="Delete", font=("arial 13 bold"), width=8, height=1, bg="steelblue", fg="white", command=self.deleteProduct) self.button_add.place(x=365, y=640) #table for tha detail view of the propduct self.table_frame = Frame(master, width=820, height=490, bg="steelblue") self.table_frame.place(x=500, y=50) self.labal_id = Label(self.table_frame, text=("Product Id"), font=("arial 15 bold"), bg="steelblue", fg="black") self.labal_id.place(x=40, y=12) self.entry_id = Entry(self.table_frame, width="10", font=("arial 15 bold"), bg="lightblue", fg="black") self.entry_id.place(x=150, y=10) self.btn_show_detail = Button(self.table_frame, text=" Show", width="7", height=1, font=("arial 12 bold"), bg="green", fg="black", command=self.show_detail) self.btn_show_detail.place(x=300, y=10) self.btn_show_detailAll = Button(self.table_frame, text=" Show All", width="7", height=1, font=("arial 12 bold"), bg="green", fg="black", command=self.show_detailAll) self.btn_show_detailAll.place(x=430, y=10) self.labal_date_today = Label(self.table_frame, text="Today's Date:" + str(date), font=(" arial 14 bold"), bg="steelblue", fg="black") self.labal_date_today.place(x=600, y=20) self.trv_frame = Frame(master, width=800, height=420, bg="grey") self.trv_frame.place(x=510, y=100) self.horizontalScrollbar = ttk.Scrollbar(self.trv_frame, orient='horizontal') self.verticalScrollbar = ttk.Scrollbar(self.trv_frame, orient='vertical') self.trv = ttk.Treeview(self.trv_frame, height="20", xscrollcommand=self.horizontalScrollbar, yscrollcommand=self.verticalScrollbar) self.trv.place(x=20, y=50) self.trv['columns'] = ('Id', 'Product', 'Stocks', 'CostPrice', 'Vender', 'Phone', 'Mfd.Date', 'Exp.Date', 'Max.Ret.Price', 'MarkedPrice', 'Remarks', 'AddedOn', 'ModifiedOn') self.horizontalScrollbar.pack(fill=X, side=BOTTOM) self.verticalScrollbar.pack(fill=BOTH, side=RIGHT) self.horizontalScrollbar.configure(command=self.trv.xview) self.verticalScrollbar.configure(command=self.trv.yview) self.trv['show'] = 'headings' self.trv.column('Id', width=30, minwidth=20, anchor=tk.CENTER) self.trv.column('Product', width=90, minwidth=80, anchor=tk.CENTER) self.trv.column('Stocks', width=50, minwidth=40, anchor=tk.CENTER) self.trv.column('CostPrice', width=40, minwidth=40, anchor=tk.CENTER) self.trv.column('Vender', width=50, minwidth=70, anchor=tk.CENTER) self.trv.column('Phone', width=70, minwidth=70, anchor=tk.CENTER) self.trv.column('Mfd.Date', width=70, minwidth=70, anchor=tk.CENTER) self.trv.column('Exp.Date', width=70, minwidth=70, anchor=tk.CENTER) self.trv.column('Max.Ret.Price', width=60, minwidth=60, anchor=tk.CENTER) self.trv.column('MarkedPrice', width=40, minwidth=40, anchor=tk.CENTER) self.trv.column('Remarks', width=80, minwidth=60, anchor=tk.CENTER) self.trv.column('AddedOn', width=50, minwidth=50, anchor=tk.CENTER) self.trv.column('ModifiedOn', width=80, minwidth=70, anchor=tk.CENTER) self.trv.heading('Id', text='Id', anchor=tk.CENTER) self.trv.heading('Product', text='Product', anchor=tk.CENTER) self.trv.heading('Stocks', text='Stock', anchor=tk.CENTER) self.trv.heading('CostPrice', text='C.P.', anchor=tk.CENTER) self.trv.heading('Vender', text='Vender', anchor=tk.CENTER) self.trv.heading('Phone', text='V.Phone', anchor=tk.CENTER) self.trv.heading('Mfd.Date', text='Mfd.Date', anchor=tk.CENTER) self.trv.heading('Exp.Date', text='Exp.Date', anchor=tk.CENTER) self.trv.heading('Max.Ret.Price', text='M.R.P.', anchor=tk.CENTER) self.trv.heading('MarkedPrice', text='M.P.', anchor=tk.CENTER) self.trv.heading('Remarks', text='Remarks.', anchor=tk.CENTER) self.trv.heading('AddedOn', text='AddedOn', anchor=tk.CENTER) self.trv.heading('ModifiedOn', text='ModifiedOn', anchor=tk.CENTER) self.trv.pack(fill=BOTH) self.show_detailAll() # text box self.textbox_text = Text(master, width=102, height=7) self.textbox_text.place(x=500, y=550) self.textbox_text.insert( END, "Product ID has reached upto:" + str(id) + " in the database.\n") #get values from the entry def addProduct(self, *args, **kwargs): self.product_name = self.entry_product_name.get() self.number_of_stocks = self.entry_number_of_stocks.get() self.cost_price = self.entry_cost_price.get() self.vender_name = self.entry_vender_name.get() self.vender_phone = self.entry_vender_phone.get() self.manufacture_date = self.entry_manufacture_date.get() self.expiry_date = self.entry_expiry_date.get() self.maximum_retail_price = self.entry_maximum_retail_price.get() self.marked_price = self.entry_marked_price.get() self.remarks = self.entry_remarks.get() if self.product_name != '' and self.number_of_stocks != '' and self.cost_price != '' and self.vender_name != '' and self.vender_phone != '' and self.manufacture_date != '' and self.expiry_date != '' and self.maximum_retail_price != '' and self.marked_price != '': sql = "INSERT INTO product_details(product_name,number_of_stocks,cost_price,vender_name,vender_phone,manufacture_date, expiry_date,maximum_retail_price, marked_price,remarks,added_date) VALUES(?,?,?,?,?,?,?,?,?,?,?)" c.execute( sql, (self.product_name, self.number_of_stocks, self.cost_price, self.vender_name, self.vender_phone, self.manufacture_date, self.expiry_date, self.maximum_retail_price, self.marked_price, self.remarks, date)) conn.commit() self.textbox_text.insert( END, "\n Inserted! " + str(self.product_name) + " into the database") tkinter.messagebox.showinfo( "Success!", "Successfully!!!\nThe Product Details are \nSaved in Database!!!" ) else: tkinter.messagebox.showinfo( "Error!", "Please Fill All Fields\n All Fields are Required") # to clear the fields self.entry_product_id.delete(0, END) self.entry_product_name.delete(0, END) self.entry_number_of_stocks.delete(0, END) self.entry_cost_price.delete(0, END) self.entry_vender_name.delete(0, END) self.entry_vender_phone.delete(0, END) self.entry_manufacture_date.delete(0, END) self.entry_expiry_date.delete(0, END) self.entry_maximum_retail_price.delete(0, END) self.entry_marked_price.delete(0, END) self.entry_remarks.delete(0, END) def searchProduct(self, *args, **kwargs): # to clear the fields self.entry_product_name.delete(0, END) self.entry_number_of_stocks.delete(0, END) self.entry_cost_price.delete(0, END) self.entry_vender_name.delete(0, END) self.entry_vender_phone.delete(0, END) self.entry_manufacture_date.delete(0, END) self.entry_expiry_date.delete(0, END) self.entry_maximum_retail_price.delete(0, END) self.entry_marked_price.delete(0, END) self.entry_remarks.delete(0, END) sql = "SELECT product_id FROM product_details" self.result = c.execute(sql).fetchall() if self.entry_product_id.get() != '' and [ self.result for self.result in self.result if self.result[0] == int(self.entry_product_id.get()) ]: sql = "SELECT * FROM product_details WHERE product_id=?" result = c.execute( sql, (self.entry_product_id.get()), ) for r in result: self.r1 = r[1] self.r2 = r[2] self.r3 = r[3] self.r4 = r[4] self.r5 = r[5] self.r6 = r[6] self.r7 = r[7] self.r8 = r[8] self.r9 = r[9] self.r10 = r[10] conn.commit() # deleting previous value and getting new values to the entry fields self.entry_product_name.insert(0, str(self.r1)) self.entry_number_of_stocks.delete(0, END) self.entry_number_of_stocks.insert(0, str(self.r2)) self.entry_cost_price.delete(0, END) self.entry_cost_price.insert(0, str(self.r3)) self.entry_vender_name.delete(0, END) self.entry_vender_name.insert(0, str(self.r4)) self.entry_vender_phone.delete(0, END) self.entry_vender_phone.insert(0, str(self.r5)) self.entry_manufacture_date.delete(0, END) self.entry_manufacture_date.insert(0, str(self.r6)) self.entry_expiry_date.delete(0, END) self.entry_expiry_date.insert(0, str(self.r7)) self.entry_maximum_retail_price.delete(0, END) self.entry_maximum_retail_price.insert(0, str(self.r8)) self.entry_marked_price.delete(0, END) self.entry_marked_price.insert(0, str(self.r9)) self.entry_remarks.delete(0, END) self.entry_remarks.insert(0, str(self.r10)) self.textbox_text.insert( END, "\n Searched!,\tProduct with id " + self.entry_product_id.get() + " in the database") else: self.entry_product_id.delete(0, END) tkinter.messagebox.showinfo( "Error!", "Wrong Product Id Format.\nProduct Id Format:Number.\nEnter Correct Product Id." ) #get values from the entry def updateProduct(self, *args, **kwargs): self.product_name = self.entry_product_name.get() self.number_of_stocks = self.entry_number_of_stocks.get() self.cost_price = self.entry_cost_price.get() self.vender_name = self.entry_vender_name.get() self.vender_phone = self.entry_vender_phone.get() self.manufacture_date = self.entry_manufacture_date.get() self.expiry_date = self.entry_expiry_date.get() self.maximum_retail_price = self.entry_maximum_retail_price.get() self.marked_price = self.entry_marked_price.get() self.remarks = self.entry_remarks.get() if self.product_name != '' and self.number_of_stocks != '' and self.cost_price != '' and self.vender_name != '' and self.vender_phone != '' and self.manufacture_date != '' and self.expiry_date != '' and self.maximum_retail_price != '' and self.marked_price != '': self.u1 = self.entry_product_name.get() self.u2 = self.entry_number_of_stocks.get() self.u3 = self.entry_cost_price.get() self.u4 = self.entry_vender_name.get() self.u5 = self.entry_vender_phone.get() self.u6 = self.entry_manufacture_date.get() self.u7 = self.entry_expiry_date.get() self.u8 = self.entry_maximum_retail_price.get() self.u9 = self.entry_marked_price.get() self.u10 = self.entry_remarks.get() sql = "UPDATE product_details SET product_name=?,number_of_stocks=?,cost_price=?,vender_name=?,vender_phone=?,manufacture_date=?,expiry_date=?,maximum_retail_price=?,marked_price=?,remarks=?, modified_date =? WHERE product_id=?" c.execute(sql, (self.u1, self.u2, self.u3, self.u4, self.u5, self.u6, self.u7, self.u8, self.u9, self.u10, date, self.entry_product_id.get())) self.textbox_text.insert( END, "\n Updated!, " + str(self.u1) + " into the database") tkinter.messagebox.showinfo( "Success!", "Successfully!!!\nThe Product Details are\nUpdated in Database!!!" ) conn.commit() else: tkinter.messagebox.showinfo( "Error!", "Product Before Updating.\nProduct Searching Required.") # to clear the fields self.entry_product_id.delete(0, END) self.entry_product_name.delete(0, END) self.entry_number_of_stocks.delete(0, END) self.entry_cost_price.delete(0, END) self.entry_vender_name.delete(0, END) self.entry_vender_phone.delete(0, END) self.entry_manufacture_date.delete(0, END) self.entry_expiry_date.delete(0, END) self.entry_maximum_retail_price.delete(0, END) self.entry_marked_price.delete(0, END) self.entry_remarks.delete(0, END) # to delete the product delete def deleteProduct(self, *args, **kwargs): sql = "SELECT product_id FROM product_details" self.result = c.execute(sql).fetchall() if self.entry_product_id.get() != '' and [ self.result for self.result in self.result if self.result[0] == int(self.entry_product_id.get()) ]: sql = "DELETE FROM product_details WHERE product_id=?" c.execute(sql, (self.entry_product_id.get(), )) self.textbox_text.insert( END, "\n Deleted!\tproduct with id " + self.entry_product_id.get() + " from the database") tkinter.messagebox.showinfo( "Success!,", "Successfully!!!\nThe Product Details are\nDeleted form Database!!!" ) conn.commit() else: tkinter.messagebox.showinfo( "Error!", "Product Before Deleting.\nProduct Searching Required.") # to clear the fields self.entry_product_id.delete(0, END) self.entry_product_name.delete(0, END) self.entry_number_of_stocks.delete(0, END) self.entry_cost_price.delete(0, END) self.entry_vender_name.delete(0, END) self.entry_vender_phone.delete(0, END) self.entry_manufacture_date.delete(0, END) self.entry_expiry_date.delete(0, END) self.entry_maximum_retail_price.delete(0, END) self.entry_marked_price.delete(0, END) self.entry_remarks.delete(0, END) def show_detail(self, *argts, **kwargs): self.get_id = self.entry_id.get() sql = "SELECT * FROM product_details WHERE product_id=? " c.execute(sql, (self.get_id, )) self.rows = c.fetchall() self.trv.delete(*self.trv.get_children()) if len(self.rows) != 0: self.i = 0 for row in self.rows: if row[2] < 5: self.trv.insert('', self.i, text='', values=(row[0], row[1] + ('(!)'), row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10])) self.i += 1 else: tkinter.messagebox.showinfo( "Error!", "No Such Product Found in database.\nEnter correct product_id..." ) conn.commit() def show_detailAll(self, *argts, **kwargs): self.entry_id.delete(0, END) sql = "SELECT * FROM product_details " c.execute(sql) self.rows = c.fetchall() self.trv.delete(*self.trv.get_children()) if len(self.rows) != 0: self.i = 0 for row in self.rows: if row[2] < 5: self.trv.insert('', self.i, text='', values=(row[0], row[1] + ('(!)'), row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10])) else: self.trv.insert('', self.i, text='', values=(row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10])) self.i += 1 conn.commit()
class View_appointment: def __init__(self, user_info,window, appoint_function, previous_function, next_function, delete_function): self.window = window self.user_info = user_info self.app_appoint = None # event handlers self.appoint = appoint_function self.previous = previous_function self.next = next_function self.delete = delete_function # frame self.appoint_data_frame = tk.Frame(master=self.window, relief=tk.RAISED, borderwidth=1) self.appoint_data_frame.grid(row=1, column=1, padx=5, pady=5) self.buttons_frame = tk.Frame(master=self.window, relief=tk.RAISED, borderwidth=1) self.buttons_frame.grid(row=3, column=1, padx=5, pady=5) # Textboxes & their labels self.label_uid = tk.Label(master=self.appoint_data_frame, text="User ID:") self.label_uid.grid(row=1, column=1, sticky="w") self.e_uid = tk.StringVar() self.txt_uid = tk.Entry(master=self.appoint_data_frame, textvariable=self.e_uid,width=50) self.txt_uid.grid(row=1, column=2) self.e_uid.set(user_info[0]) self.txt_uid.configure(state='disabled') self.label_uname = tk.Label(master=self.appoint_data_frame, text="User Name:") self.label_uname.grid(row=2, column=1, sticky="w") self.e_uname = tk.StringVar() self.txt_uname = tk.Entry(master=self.appoint_data_frame,textvariable=self.e_uname, width=50) self.txt_uname.grid(row=2, column=2) self.e_uname.set(user_info[1]) self.txt_uname.configure(state='disabled') self.label_date = tk.Label(text="Appointment Date:", master=self.appoint_data_frame) self.label_date.grid(row=3, column=1, sticky="w") self.txt_date = DateEntry(master=self.appoint_data_frame, width=12, year=2020, month=9, day=22,background='darkblue', foreground='white', borderwidth=2) #self.txt_date.pack(padx=10, pady=10) self.txt_date.grid(row=3, column=2) self.label_time = tk.Label(text="Appointment Time:", master=self.appoint_data_frame) self.label_time.grid(row=4, column=1, sticky="w") self.txt_time = ttk.Combobox(master=self.appoint_data_frame) self.txt_time['value'] = ('10:00am', '10:15am', '10:30am', '10:45am', '11:00am', '11:15am', '11:30am', '11:45am', '12:00pm', '12:15pm', '12:30pm', '12:45pm', '1:00pm', '1:15pm', '1:30pm', '1:45pm', '2:00pm', '2:15pm', '2:30pm', '2:45pm') self.txt_time.current(0) self.txt_time.grid(row=4, column=2) self.label_doctor = tk.Label(text="Doctor Name:", master=self.appoint_data_frame) self.label_doctor.grid(row=5, column=1, sticky="w") self.txt_doctor = ttk.Combobox(master=self.appoint_data_frame) self.txt_doctor['value'] = ('Andy', 'Charlie') self.txt_doctor.current(0) self.txt_doctor.grid(row=5, column=2) # ----- Buttons ----- self.button_previous = tk.Button(text="Previous", width=12, master=self.buttons_frame) self.button_previous.bind("<ButtonRelease-1>", self._handle_previous) self.button_previous.grid(row=1, column=1) self.button_next = tk.Button(text="Next", width=12, master=self.buttons_frame) self.button_next.bind("<ButtonRelease-1>", self._handle_next) self.button_next.grid(row=1, column=2) self.button_update = tk.Button(text="Appointment", width=12, master=self.buttons_frame) self.button_update.bind("<ButtonRelease-1>", self._handle_appointment) self.button_update.grid(row=1, column=3) self.button_delete = tk.Button(text="Delete", width=12, master=self.buttons_frame) self.button_delete.bind("<ButtonRelease-1>", self._handle_delete) self.button_delete.grid(row=1, column=5) def switch_to_appointment(self, apponintment=None): if apponintment is None: # todo: should throwing an error not returning print("Missing Apponintment") return None self.app_appoint = apponintment self.txt_date.delete(0, tk.END) self.txt_date.insert(0, apponintment.date) self.txt_time.delete(0, tk.END) self.txt_time.insert(0, apponintment.time) self.txt_doctor.delete(0, tk.END) self.txt_doctor.insert(0, apponintment.d_name) def _handle_appointment(self, _): ck_appoint = True if self._validate(): app_appoint = self.get_appoint() self.appoint(app_appoint) else: ck_appoint = False return ck_appoint def _handle_previous(self, _): app_appoint = self.get_appoint() self.previous(app_appoint) def _handle_next(self, _): app_appoint = self.get_appoint() self.next(app_appoint) def _handle_delete(self, _): app_appoint = self.get_appoint() self.delete(app_appoint) def _validate(self): validity = True if len(self.txt_uname.get().strip()) == 0: self.txt_uname.configure(bg="#FF8786") self.txt_uname.insert(0, "Missing User Name!") validity = False else: self.txt_uname.configure(bg="#FFFFFF") return validity def get_appoint(self): app_appoint = App_Appoint( userid=self.txt_uid.get(), date=self.txt_date.get().strip(), time=self.txt_time.get().strip(), doctorname=self.txt_doctor.get().strip() ) return app_appoint
def __init__(self, root, connection, master): """FormNewRepair init.""" super().__init__(root=root, connection=connection) self.root.state('zoomed') self.master = master self.root['bg'] = 'black' self.client_selected = tk.StringVar() self.vehicle_selected = tk.StringVar() self.client_id = tk.StringVar() self.name = tk.StringVar() self.last_name = tk.StringVar() self.identity_card = tk.StringVar() self.email = tk.StringVar() self.phone_1 = tk.StringVar() self.phone_2 = tk.StringVar() self.address = tk.StringVar() self.vehicle_id = tk.StringVar() self.vehicle_identity = tk.StringVar() self.color = tk.StringVar() self.brand = tk.StringVar() self.model = tk.StringVar() self.year = tk.StringVar() self.status_selected = tk.StringVar() self.mileage = tk.StringVar() self.client_obs = tk.StringVar() self.mechanical_obs = tk.StringVar() self.final_obs = tk.StringVar() self.price = tk.StringVar() self.date_entry = tk.StringVar() self.date_exit = tk.StringVar() # Frame Search clients frame_search_client = tk.LabelFrame(self.root, text="Buscar cliente", bg="black", foreground="white", font='Helvetica 12 bold') frame_search_client.pack(side="top", padx=5, pady=5, fill='x') self.client_selected.trace_add("write", self.callback_client) self.client_chosen = ttk.Combobox(frame_search_client, width=20, font='Helvetica 12 bold', state="readonly", textvariable=self.client_selected) self.client_chosen["values"] = self.get_clients() self.client_chosen.pack(side="top", padx=5, pady=5, fill='x', expand=True) # Frame Details Clients frame_details_client = tk.LabelFrame(self.root, text="Datos del cliente", bg="black", foreground="white", font='Helvetica 12 bold') frame_details_client.pack(side="top", padx=5, pady=5, fill='x') frame_details_client_1 = tk.Frame(frame_details_client, bg="black") frame_details_client_1.pack(side="top", fill='x') frame_details_client_2 = tk.Frame(frame_details_client_1, bg="black") frame_details_client_2.pack(side="left", fill='x', expand=True) frame_details_client_3 = tk.Frame(frame_details_client_1, bg="black") frame_details_client_3.pack(side="left", fill='x', expand=True) frame_details_client_4 = tk.Frame(frame_details_client_1, bg="black") frame_details_client_4.pack(side="left", fill='x', expand=True) frame_details_client_5 = tk.Frame(frame_details_client_1, bg="black") frame_details_client_5.pack(side="left", fill='x', expand=True) frame_details_client_6 = tk.Frame(frame_details_client, bg="black") frame_details_client_6.pack(side="top", fill='x') frame_details_client_7 = tk.Frame(frame_details_client_6, bg="black") frame_details_client_7.pack(side="left", fill='x') frame_details_client_8 = tk.Frame(frame_details_client_6, bg="black") frame_details_client_8.pack(side="left", fill='x', expand=True) name_label = tk.Label(frame_details_client_2, text="Nombre", font='Helvetica 12 bold', anchor='w', foreground="gold2", bg="black") name_label.pack(padx=5, pady=5, fill='both') name_entry = tk.Entry(frame_details_client_3, font="Helvetica 12", textvariable=self.name) name_entry.config(state='readonly') name_entry.pack(padx=5, pady=5, fill='both') last_name_label = tk.Label(frame_details_client_4, text="Apellido", font='Helvetica 12 bold', anchor='w', foreground="gold2", bg="black") last_name_label.pack(padx=5, pady=5, fill='both') last_name_entry = tk.Entry(frame_details_client_5, font="Helvetica 12", textvariable=self.last_name) last_name_entry.config(state='readonly') last_name_entry.pack(padx=5, pady=5, fill='both') identity_card_label = tk.Label(frame_details_client_2, text="Cedula", font='Helvetica 12 bold', anchor='w', foreground="gold2", bg="black") identity_card_label.pack(padx=5, pady=5, fill='both') identity_card_entry = tk.Entry(frame_details_client_3, font="Helvetica 12", textvariable=self.identity_card) identity_card_entry.config(state='readonly') identity_card_entry.pack(padx=5, pady=5, fill='both') email_label = tk.Label(frame_details_client_4, text="Email", font='Helvetica 12 bold', anchor='w', foreground="gold2", bg="black") email_label.pack(padx=5, pady=5, fill='both') email_entry = tk.Entry(frame_details_client_5, font="Helvetica 12", textvariable=self.email) email_entry.config(state='readonly') email_entry.pack(padx=5, pady=5, fill='both') phone_1_label = tk.Label(frame_details_client_2, text="Telefono fijo", font='Helvetica 12 bold', anchor='w', foreground="gold2", bg="black") phone_1_label.pack(padx=5, pady=5, fill='both') phone_1_entry = tk.Entry(frame_details_client_3, font="Helvetica 12", textvariable=self.phone_1) phone_1_entry.config(state='readonly') phone_1_entry.pack(padx=5, pady=5, fill='both') phone_2_label = tk.Label(frame_details_client_4, text="Celular", font='Helvetica 12 bold', anchor='w', foreground="gold2", bg="black") phone_2_label.pack(padx=5, pady=5, fill='both') phone_2_entry = tk.Entry(frame_details_client_5, font="Helvetica 12", textvariable=self.phone_2) phone_2_entry.config(state='readonly') phone_2_entry.pack(padx=5, pady=5, fill='both') address_label = tk.Label(frame_details_client_7, text="Direccion", font='Helvetica 12 bold', anchor='w', foreground="gold2", bg="black") address_label.pack(padx=5, pady=5, fill='both') address_entry = tk.Entry(frame_details_client_8, font="Helvetica 12", textvariable=self.address) address_entry.config(state='readonly') address_entry.pack(padx=5, pady=5, fill='both') # Frame Search vehicle frame_search_vehicle = tk.LabelFrame(self.root, text="Buscar vehiculo", bg="black", foreground="white", font='Helvetica 12 bold') frame_search_vehicle.pack(side="top", padx=5, pady=5, fill='x') self.vehicle_selected.trace_add("write", self.callback_vehicle) self.vehicle_chosen = ttk.Combobox(frame_search_vehicle, width=20, font='Helvetica 12 bold', state="readonly", textvariable=self.vehicle_selected) self.vehicle_chosen.pack(side="top", padx=5, pady=5, fill='x', expand=True) # Frame Vehicle details frame_details_vehicle = tk.LabelFrame(self.root, text="Datos del vehiculo", bg="black", foreground="white", font='Helvetica 12 bold') frame_details_vehicle.pack(side="top", padx=5, pady=5, fill='x') frame_details_vehicle_1 = tk.Frame(frame_details_vehicle, bg="black") frame_details_vehicle_1.pack(side="left", fill='both', padx=5, pady=5, expand=True) frame_details_vehicle_2 = tk.Frame(frame_details_vehicle, bg="black") frame_details_vehicle_2.pack(side="left", fill='both', padx=5, pady=5, expand=True) frame_details_vehicle_3 = tk.Frame(frame_details_vehicle, bg="black") frame_details_vehicle_3.pack(side="left", fill='both', padx=5, pady=5, expand=True) frame_details_vehicle_4 = tk.Frame(frame_details_vehicle, bg="black") frame_details_vehicle_4.pack(side="left", fill='both', padx=5, pady=5, expand=True) self.vehicle_identity.trace_add("write", self.callback_vehicle) self.color.trace_add("write", self.callback_vehicle) self.brand.trace_add("write", self.callback_vehicle) self.model.trace_add("write", self.callback_vehicle) self.year.trace_add("write", self.callback_vehicle) vehicle_identity_label = tk.Label(frame_details_vehicle_1, text="Placa", font='Helvetica 12 bold', anchor='w', foreground="gold2", bg="black") vehicle_identity_label.pack(padx=5, pady=5, fill='both') vehicle_identity_entry = tk.Entry(frame_details_vehicle_2, font="Helvetica 12", textvariable=self.vehicle_identity) vehicle_identity_entry.config(state='readonly') vehicle_identity_entry.pack(padx=5, pady=5, fill='both') color_label = tk.Label(frame_details_vehicle_3, text="Color", font='Helvetica 12 bold', anchor='w', foreground="gold2", bg="black") color_label.pack(padx=5, pady=5, fill='both') color_entry = tk.Entry(frame_details_vehicle_4, font="Helvetica 12", textvariable=self.color) color_entry.config(state='readonly') color_entry.pack(padx=5, pady=5, fill='both') vehicle_type_label = tk.Label(frame_details_vehicle_1, text="Tipo de Vehiculo", font='Helvetica 12 bold', anchor='w') vehicle_type_label.pack(padx=5, pady=5, fill='both') brand_entry = tk.Entry(frame_details_vehicle_2, font="Helvetica 12", textvariable=self.brand) brand_entry.config(state='readonly') brand_entry.pack(padx=5, pady=5, fill='both') model_entry = tk.Entry(frame_details_vehicle_3, font="Helvetica 12", textvariable=self.model) model_entry.config(state='readonly') model_entry.pack(padx=5, pady=5, fill='both') year_entry = tk.Entry(frame_details_vehicle_4, font="Helvetica 12", textvariable=self.year) year_entry.config(state='readonly') year_entry.pack(padx=5, pady=5, fill='both') mileage_label = tk.Label(frame_details_vehicle_1, text="Kilometraje", font='Helvetica 12 bold', anchor='w', foreground="gold2", bg="black") mileage_label.pack(padx=5, pady=5, fill='both') mileage_entry = tk.Entry(frame_details_vehicle_2, font="Helvetica 12", textvariable=self.mileage) mileage_entry.pack(padx=5, pady=5, fill='both') # Repair details frame_details_repair = tk.LabelFrame(self.root, text="Detalles de la Reparación", foreground="white", font='Helvetica 12 bold', bg="black") frame_details_repair.pack(side="top", padx=5, pady=5, fill='both') frame_details_repair_1 = tk.Frame(frame_details_repair, bg="black") frame_details_repair_1.pack(side="top", fill='x', expand=True) frame_details_repair_1_a = tk.Frame(frame_details_repair_1, bg="black") frame_details_repair_1_a.pack(side="left", padx=5, pady=5, fill='x', expand=True) frame_details_repair_1_a_a = tk.Frame(frame_details_repair_1_a, bg="black") frame_details_repair_1_a_a.pack(side="top", fill='x', expand=True) frame_details_repair_1_b = tk.Frame(frame_details_repair_1, bg="black") frame_details_repair_1_b.pack(side="left", fill='x', expand=True) frame_details_repair_1_b_a = tk.Frame(frame_details_repair_1_b, bg="black") frame_details_repair_1_b_a.pack(side="top", fill='x', expand=True) frame_details_repair_2 = tk.Frame(frame_details_repair, bg="black") frame_details_repair_2.pack(side="top", fill='x', expand=True) frame_details_repair_2_a = tk.Frame(frame_details_repair_2, bg="black") frame_details_repair_2_a.pack(side="left", fill='x', expand=True) frame_details_repair_2_a_a = tk.Frame(frame_details_repair_2_a, bg="black") frame_details_repair_2_a_a.pack(side="top", padx=5, pady=5, fill='x', expand=True) frame_details_repair_2_b = tk.Frame(frame_details_repair_2, bg="black") frame_details_repair_2_b.pack(side="left", fill='x', expand=True) frame_details_repair_2_b_a = tk.Frame(frame_details_repair_2_b, bg="black") frame_details_repair_2_b_a.pack(side="top", fill='x', expand=True) frame_details_repair_3 = tk.Frame(frame_details_repair, bg="black") frame_details_repair_3.pack(side="top", fill='x', expand=True) frame_details_repair_3_a = tk.Frame(frame_details_repair_3, bg="black") frame_details_repair_3_a.pack(side="left", padx=5, pady=5, fill='x', expand=True) # Date Entry date_entry_label = tk.Label(frame_details_repair_1_a_a, text="Fecha de entrada:", font='Helvetica 12 bold', anchor='w', foreground="gold2", bg="black") date_entry_label.pack(side="left", padx=5, pady=5, fill='x') date_entry = DateEntry(frame_details_repair_1_a_a, width=10, background='darkblue', foreground='white', borderwidth=1, date_pattern='dd/mm/y', font='Helvetica 12 bold', textvariable=self.date_entry) date_entry.pack(side="left", padx=5, pady=5, fill='x') # Client observations client_obs_label = tk.Label(frame_details_repair_1_a, text="Observaciones del Cliente:", font='Helvetica 12 bold', anchor='w', foreground="gold2", bg="black") client_obs_label.pack(side="top", fill='x', expand=True) self.client_obs = tk.Text(frame_details_repair_1_a, height=4) self.client_obs.pack(side="left", fill="x", expand=True) scrollbar_client = tk.Scrollbar(frame_details_repair_1_a) scrollbar_client.pack(side="left", fill="y") scrollbar_client.config(command=self.client_obs.yview) self.client_obs.config(yscrollcommand=scrollbar_client.set) # Status status_label = tk.Label(frame_details_repair_2_a_a, text="Estado:", font='Helvetica 12 bold', anchor='w', foreground="gold2", bg="black") status_label.pack(side="left", padx=5, pady=5, fill='x') self.status_chosen = ttk.Combobox(frame_details_repair_2_a_a, width=12, font='Helvetica 12 bold', state="readonly", textvariable=self.status_selected) self.status_chosen["values"] = ["EN TALLER"] self.status_chosen.current(0) self.status_chosen.pack(side="left", padx=5, pady=5, fill='x') # Date Exit date_exit_label = tk.Label(frame_details_repair_1_b_a, text="Fecha de salida:", font='Helvetica 12 bold', anchor='w', foreground="gold2", bg="black") date_exit_label.pack(side="left", padx=5, pady=5, fill='x') date_exit = DateEntry(frame_details_repair_1_b_a, width=10, background='darkblue', foreground='white', borderwidth=1, date_pattern='dd/mm/y', font='Helvetica 12 bold', textvariable=self.date_exit) date_exit.delete(0, "end") date_exit.config(state="disabled") date_exit.pack(side="left", padx=5, pady=5, fill='x') # Mechanical observations mechanical_obs_label = tk.Label(frame_details_repair_1_b, text="Observaciones del Mecánico:", font='Helvetica 12 bold', anchor='w', foreground="gold2", bg="black") mechanical_obs_label.pack(side="top", fill='x', expand=True) scrollbar_mechanical = tk.Scrollbar(frame_details_repair_1_b) self.mechanical_obs = tk.Text(frame_details_repair_1_b, height=4) self.mechanical_obs.pack(side="left", fill="x", expand=True) scrollbar_mechanical.pack(side="left", fill="y") scrollbar_mechanical.config(command=self.mechanical_obs.yview) self.mechanical_obs.config(yscrollcommand=scrollbar_mechanical.set) # Price price_label = tk.Label(frame_details_repair_2_b_a, text="Precio:", font='Helvetica 12 bold', foreground="gold2", bg="black") price_label.pack(side="left", padx=5, pady=5) price_entry = tk.Entry(frame_details_repair_2_b_a, font="Helvetica 12 bold", textvariable=self.price) price_entry.pack(side="left", padx=5, pady=5, fill='x', expand=True) # Final observations final_obs_label = tk.Label(frame_details_repair_3_a, text="Observación final:", font='Helvetica 12 bold', anchor='w', foreground="gold2", bg="black") final_obs_label.pack(side="top", fill='x', expand=True) self.final_obs = tk.Text(frame_details_repair_3_a, height=3) self.final_obs.configure(state='disabled') self.final_obs.pack(side="left", fill="x", expand=True) scrollbar_final = tk.Scrollbar(frame_details_repair_3_a) scrollbar_final.pack(side="left", fill="y") scrollbar_final.config(command=self.client_obs.yview) self.final_obs.config(yscrollcommand=scrollbar_client.set) # Buttons frame_buttons = tk.Frame(self.root, bg="black") frame_buttons.pack(side="bottom", fill='x') button_1 = tk.Button(frame_buttons, text="Crear", font='Helvetica 12 bold', width=15, bg="gold2", command=self.create_repair) button_1.pack(side='right', fil='x', padx=5, pady=5) button_2 = tk.Button(frame_buttons, text="Regresar", font='Helvetica 12 bold', width=15, bg="gold2", command=self.go_back) button_2.pack(side='right', fil='x', padx=5, pady=5) self.root.mainloop()
class staff(): def __init__(self, master): self.master = master self.master.resizable(0, 0) self.master.geometry('1080x540+260+140') self.master.title("Staff Member Info") self.master.configure(background="#d9d9d9") self.widgets() def widgets(self): font15 = "-family Arial -size 12 -weight bold -slant roman " \ "-underline 0 -overstrike 0" font16 = "-family Arial -size 18 -weight bold -slant roman " \ "-underline 0 -overstrike 0" font9 = "-family Arial -size 20 -weight bold -slant roman " \ "-underline 0 -overstrike 0" self.Label1 = Label(self.master) self.Label1.place(relx=0.0, rely=0.018, height=51, width=284) self.Label1.configure(background="#d9d9d9") self.Label1.configure(disabledforeground="#a3a3a3") self.Label1.configure(font=font9) self.Label1.configure(foreground="#000000") self.Label1.configure(text='''Staff Member Info''') self.Label1.configure(width=284) self.TSeparator1 = ttk.Separator(self.master) self.TSeparator1.place(relx=0.037, rely=0.107, relwidth=0.935) self.name = Label(self.master) self.name.place(relx=0.046, rely=0.179, height=31, width=84) self.name.configure(background="#d9d9d9") self.name.configure(disabledforeground="#a3a3a3") self.name.configure(font=font15) self.name.configure(foreground="#000000") self.name.configure(text='''Name :''') self.name.configure(width=84) self.name_entry = Entry(self.master) self.name_entry.place(relx=0.176, rely=0.196, height=20, relwidth=0.152) self.name_entry.configure(background="white") self.name_entry.configure(disabledforeground="#a3a3a3") self.name_entry.configure(font="TkFixedFont") self.name_entry.configure(foreground="#000000") self.name_entry.configure(insertbackground="black") self.gender = Label(self.master) self.gender.place(relx=0.046, rely=0.304, height=31, width=84) self.gender.configure(activebackground="#f9f9f9") self.gender.configure(activeforeground="black") self.gender.configure(background="#d9d9d9") self.gender.configure(disabledforeground="#a3a3a3") self.gender.configure(font=font15) self.gender.configure(foreground="#000000") self.gender.configure(highlightbackground="#d9d9d9") self.gender.configure(highlightcolor="black") self.gender.configure(text='''Gender :''') self.gender.configure(width=84) self.gender_v = StringVar() self.gender_rm = Radiobutton(self.master, value="Male", variable=self.gender_v, text="Male", bg='#d9d9d9', activebackground='#d9d9d9').place( relx=0.176, rely=0.313, relheight=0.045, relwidth=0.05) self.gender_rf = Radiobutton(self.master, value="Female", variable=self.gender_v, text="Female", bg='#d9d9d9', activebackground='#d9d9d9').place( relx=0.241, rely=0.313, relheight=0.045, relwidth=0.05) self.dob = Label(self.master) self.dob.place(relx=0.046, rely=0.571, height=31, width=84) self.dob.configure(activebackground="#f9f9f9") self.dob.configure(activeforeground="black") self.dob.configure(background="#d9d9d9") self.dob.configure(disabledforeground="#a3a3a3") self.dob.configure(font=font15) self.dob.configure(foreground="#000000") self.dob.configure(highlightbackground="#d9d9d9") self.dob.configure(highlightcolor="black") self.dob.configure(text='''D.O.B :''') self.dob.configure(width=84) self.dob_e = DateEntry(self.master, background='grey', foreground='white', borderwidth=2) self.dob_e.place(relx=0.176, rely=0.580, height=20, width=120) self.marital_status = Label(self.master) self.marital_status.place(relx=0.046, rely=0.429, height=31, width=134) self.marital_status.configure(activebackground="#f9f9f9") self.marital_status.configure(activeforeground="black") self.marital_status.configure(background="#d9d9d9") self.marital_status.configure(disabledforeground="#a3a3a3") self.marital_status.configure(font=font15) self.marital_status.configure(foreground="#000000") self.marital_status.configure(highlightbackground="#d9d9d9") self.marital_status.configure(highlightcolor="black") self.marital_status.configure(text='''Marital Status :''') self.marital_status.configure(width=134) self.marital_combobox = ttk.Combobox( self.master, values=["Single", "Married", "Divorced"]) self.marital_combobox.current(0) self.marital_combobox.place(relx=0.176, rely=0.444, height=20, relwidth=0.152) self.Member_id = Label(self.master) self.Member_id.place(relx=0.417, rely=0.179, height=31, width=121) self.Member_id.configure(activebackground="#f9f9f9") self.Member_id.configure(activeforeground="black") self.Member_id.configure(background="#d9d9d9") self.Member_id.configure(disabledforeground="#a3a3a3") self.Member_id.configure(font=font15) self.Member_id.configure(foreground="#000000") self.Member_id.configure(highlightbackground="#d9d9d9") self.Member_id.configure(highlightcolor="black") self.Member_id.configure(text='''Staff ID :''') self.Member_id.configure(width=121) self.phone_number = Label(self.master) self.phone_number.place(relx=0.417, rely=0.304, height=36, width=134) self.phone_number.configure(activebackground="#f9f9f9") self.phone_number.configure(activeforeground="black") self.phone_number.configure(background="#d9d9d9") self.phone_number.configure(disabledforeground="#a3a3a3") self.phone_number.configure(font=font15) self.phone_number.configure(foreground="#000000") self.phone_number.configure(highlightbackground="#d9d9d9") self.phone_number.configure(highlightcolor="black") self.phone_number.configure(text='''Phone Number :''') self.phone_number.configure(width=134) self.adhaar_number = Label(self.master) self.adhaar_number.place(relx=0.407, rely=0.429, height=36, width=154) self.adhaar_number.configure(activebackground="#f9f9f9") self.adhaar_number.configure(activeforeground="black") self.adhaar_number.configure(background="#d9d9d9") self.adhaar_number.configure(disabledforeground="#a3a3a3") self.adhaar_number.configure(font=font15) self.adhaar_number.configure(foreground="#000000") self.adhaar_number.configure(highlightbackground="#d9d9d9") self.adhaar_number.configure(highlightcolor="black") self.adhaar_number.configure(text='''Adhaar Number :''') self.adhaar_number.configure(width=154) self.address = Label(self.master) self.address.place(relx=0.407, rely=0.571, height=36, width=184) self.address.configure(activebackground="#f9f9f9") self.address.configure(activeforeground="black") self.address.configure(background="#d9d9d9") self.address.configure(disabledforeground="#a3a3a3") self.address.configure(font=font15) self.address.configure(foreground="#000000") self.address.configure(highlightbackground="#d9d9d9") self.address.configure(highlightcolor="black") self.address.configure(text='''Permanent Address :''') self.address.configure(width=184) self.ph_number_entry = Entry(self.master) self.ph_number_entry.place(relx=0.611, rely=0.321, height=20, relwidth=0.152) self.ph_number_entry.configure(background="white") self.ph_number_entry.configure(disabledforeground="#a3a3a3") self.ph_number_entry.configure(font="TkFixedFont") self.ph_number_entry.configure(foreground="#000000") self.ph_number_entry.configure(highlightbackground="#d9d9d9") self.ph_number_entry.configure(highlightcolor="black") self.ph_number_entry.configure(insertbackground="black") self.ph_number_entry.configure(selectbackground="#c4c4c4") self.ph_number_entry.configure(selectforeground="black") self.adhaar_entry = Entry(self.master) self.adhaar_entry.place(relx=0.611, rely=0.446, height=20, relwidth=0.152) self.adhaar_entry.configure(background="white") self.adhaar_entry.configure(disabledforeground="#a3a3a3") self.adhaar_entry.configure(font="TkFixedFont") self.adhaar_entry.configure(foreground="#000000") self.adhaar_entry.configure(highlightbackground="#d9d9d9") self.adhaar_entry.configure(highlightcolor="black") self.adhaar_entry.configure(insertbackground="black") self.adhaar_entry.configure(selectbackground="#c4c4c4") self.adhaar_entry.configure(selectforeground="black") self.TSeparator2 = ttk.Separator(self.master) self.TSeparator2.place(relx=0.037, rely=0.768, relwidth=0.935) self.staff_id_entry = Entry(self.master) self.staff_id_entry.place(relx=0.611, rely=0.196, height=20, relwidth=0.152) self.staff_id_entry.configure(background="white") self.staff_id_entry.configure(disabledforeground="#a3a3a3") self.staff_id_entry.configure(font="TkFixedFont") self.staff_id_entry.configure(foreground="#000000") self.staff_id_entry.configure(highlightbackground="#d9d9d9") self.staff_id_entry.configure(highlightcolor="black") self.staff_id_entry.configure(insertbackground="black") self.staff_id_entry.configure(selectbackground="#c4c4c4") self.staff_id_entry.configure(selectforeground="black") #self.staff_id_entry.insert(END,"Auto Assigned") self.search_button = Button(self.master) self.search_button.place(relx=0.157, rely=0.786, height=34, width=107) self.search_button.configure(activebackground="#ececec") self.search_button.configure(activeforeground="#000000") self.search_button.configure(background="#d9d9d9") self.search_button.configure(disabledforeground="#a3a3a3") self.search_button.configure(font=font16) self.search_button.configure(foreground="#000000") self.search_button.configure(highlightbackground="#d9d9d9") self.search_button.configure(highlightcolor="black") self.search_button.configure(pady="0") self.search_button.configure(text='''Search''') self.search_button.configure(width=107) self.search_button.configure(command=self.search) self.addnew_button = Button(self.master) self.addnew_button.place(relx=0.046, rely=0.786, height=34, width=117) self.addnew_button.configure(activebackground="#ececec") self.addnew_button.configure(activeforeground="#000000") self.addnew_button.configure(background="#d9d9d9") self.addnew_button.configure(disabledforeground="#a3a3a3") self.addnew_button.configure(font=font16) self.addnew_button.configure(foreground="#000000") self.addnew_button.configure(highlightbackground="#d9d9d9") self.addnew_button.configure(highlightcolor="black") self.addnew_button.configure(pady="0") self.addnew_button.configure(text='''Add New''') self.addnew_button.configure(width=117) self.addnew_button.configure(command=self.addnew) self.update_button = Button(self.master) self.update_button.place(relx=0.259, rely=0.786, height=34, width=107) self.update_button.configure(activebackground="#ececec") self.update_button.configure(activeforeground="#000000") self.update_button.configure(background="#d9d9d9") self.update_button.configure(disabledforeground="#a3a3a3") self.update_button.configure(font=font16) self.update_button.configure(foreground="#000000") self.update_button.configure(highlightbackground="#d9d9d9") self.update_button.configure(highlightcolor="black") self.update_button.configure(pady="0") self.update_button.configure(text='''Update''') self.delete_button = Button(self.master) self.delete_button.place(relx=0.361, rely=0.786, height=34, width=107) self.delete_button.configure(activebackground="#ececec") self.delete_button.configure(activeforeground="#000000") self.delete_button.configure(background="#d9d9d9") self.delete_button.configure(disabledforeground="#a3a3a3") self.delete_button.configure(font=font16) self.delete_button.configure(foreground="#000000") self.delete_button.configure(highlightbackground="#d9d9d9") self.delete_button.configure(highlightcolor="black") self.delete_button.configure(pady="0") self.delete_button.configure(text='''Delete''') self.scroll_frame = Frame(self.master, bg="red") self.scroll_frame.place(relx=0.611, rely=0.571, height=35, relwidth=0.152) self.scrollbar = Scrollbar(self.scroll_frame, orient="horizontal") self.scrolled_entry = Entry(self.scroll_frame, xscrollcommand=self.scrollbar.set) self.scrolled_entry.focus() self.scrolled_entry.pack(side="top", fill="x") self.scrollbar.pack(fill="x") self.scrollbar.config(command=self.scrolled_entry.xview) self.scrolled_entry.config() def addnew(self): if (str(self.name_entry.get()) != "" and str(self.gender_v.get()) != "" and str(self.dob_e.get_date()) != "" and str(self.ph_number_entry.get()) != "" and str(self.adhaar_entry.get()) != "" and str(self.scrolled_entry.get()) != ""): self.password = simpledialog.askstring( "Enter Password", "Enter a Password For This New Staff Member", parent=self.master) if (self.password == ""): messagebox.showerror("Password Must", "Password Can't be Empty") self.addnew() else: try: mydb = mysql.connector.connect(host="localhost", user="******", passwd="") try: mycursor = mydb.cursor() mycursor.execute("CREATE DATABASE IF NOT EXISTS staff") mycursor.execute("USE staff") mycursor.execute( "CREATE TABLE IF NOT EXISTS staff_member_record (staff_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,name VARCHAR(20)," "gender VARCHAR(10),date_of_birth VARCHAR(20)," "marital_status VARCHAR(15),phone_number VARCHAR(16),adhaar_number VARCHAR(20),permanent_address VARCHAR(200),password VARCHAR(50))" ) mycursor.execute( "INSERT INTO staff_member_record(name,gender,date_of_birth,marital_status," "phone_number,adhaar_number,permanent_address,password)VALUES(%s,%s,%s,%s,%s,%s,%s,%s)", ( str(self.name_entry.get()), str(self.gender_v.get()), str(self.dob_e.get_date()), str(self.marital_combobox.get()), str(self.ph_number_entry.get()), str(self.adhaar_entry.get()), str(self.scrolled_entry.get()), str(self.password), )) mycursor.close() mydb.commit() messagebox.showinfo( "Succed", "Table Has Been Succesfully Created") except Exception as ex: messagebox.showerror( "Error Occured", "Error in fetching due to " + str(ex)) finally: mydb.close() except Exception as ex: messagebox.showerror( "Error Occured", "Error creating database due to " + str(ex)) else: messagebox.showerror("Error Occured", "Please Fill All The Fields") self.master.deiconify() def search(self): if (True): try: mydb = mysql.connector.connect(host="localhost", user="******", passwd="") try: mycursor = mydb.cursor() mycursor.execute("USE staff") mycursor.execute( "SELECT * FROM staff_member_record WHERE staff_id = %s", (str(self.staff_id_entry.get()), )) record = mycursor.fetchall() for row in record: print(row[1], row[2], row[3], row[4], row[5]) self.staff_id_entry.delete(0, END) self.staff_id_entry.insert(END, str(row[0])) self.name_entry.delete(0, END) self.name_entry.insert(END, str(row[1])) if (str(row[2]) == "Male"): self.gender_v.set("Male") elif (str(row[2]) == "Female"): self.gender_v.set("Female") self.dob_e.delete(0, END) self.dob_e.insert(END, str(row[3])) self.marital_combobox.delete(0, END) self.marital_combobox.insert(END, str(row[4])) self.ph_number_entry.delete(0, END) self.ph_number_entry.insert(END, str(row[5])) self.adhaar_entry.delete(0, END) self.adhaar_entry.insert(END, str(row[6])) self.scrolled_entry.delete(0, END) self.scrolled_entry.insert(END, str(row[7])) mycursor.close() mydb.commit() except Exception as ex: messagebox.showerror("Error Occured", "Error in fetching due to " + str(ex)) finally: mydb.close() except Exception as ex: messagebox.showerror( "Error Occured", "Error creating database due to " + str(ex))
def edit_task(task): existing_tasks = get_all_tasks_from_file() task_to_edit = existing_tasks[eval(task)] clear_view() Label(text="Enter your task name: ").grid(row=0, column=0, padx=20, pady=20) name = Entry(tk) name.delete(0, END) name.insert(0, task_to_edit['name']) name.grid(row=0, column=1, padx=20, pady=20) Label(tk, text="Due date: ").grid(row=1, column=0, padx=20, pady=20) date = DateEntry(tk) date.delete(0, END) date.insert(0, task_to_edit['due_date']) date.grid(row=1, column=1, padx=20, pady=20) Label(tk, text="Description: ").grid(row=2, column=0, padx=20, pady=20) description = ScrolledText(tk, width=20, height=10) description.insert(INSERT, task_to_edit['description']) description.insert(END, "") description.grid(row=2, column=1, padx=20, pady=20) Label( text= f"Select priority, current is {task_to_edit['priority'] if task_to_edit['priority'] != 0 else None}" ).grid(row=3, column=0, padx=20, pady=20) s = IntVar() rad1 = Radiobutton(tk, text='Low', value=1, variable=s) rad2 = Radiobutton(tk, text='Medium', value=2, variable=s) rad3 = Radiobutton(tk, text='High', value=3, variable=s) rad1.grid(column=1, row=3) rad2.grid(column=2, row=3) rad3.grid(column=3, row=3) Label(tk, text="Check if completed: ").grid(row=4, column=0, padx=20, pady=20) Label(tk, text="Check if completed: ").grid(row=4, column=0, padx=20, pady=20) chk_state = BooleanVar() chk_state.set(task_to_edit["is_completed"]) # set check state chk = Checkbutton(tk, text='Choose', var=chk_state) chk.grid(column=1, row=4) Button(tk, text="Edit task", bg="yellow", fg="black", command=lambda: write_tasks_to_file(all_tasks_to_write, task_to_edit )).grid(row=5, column=0) Button(tk, text="Cancel", bg="black", fg="white", command=lambda: render_main_view()).grid(row=5, column=1, padx=100, pady=100)
class DesktopApp(tk.Tk): #root class def __init__(self): super().__init__() self.title("Desktops Management System") self.geometry( "840x640+640+200") #scrn_length*scrn_breadth+scrnXpos+scrnYpos #LABELS self.lblTitle = tk.Label(self, text="Desktops Management System", font=("Helvetica", 16), bg="yellow", fg="green", relief="ridge") self.lblName = tk.Label(self, text="UserName:"******"Helvetica", 10), bg="blue", fg="yellow") self.lblCPU = tk.Label(self, text="CPU usage : ", font=("Helvetica", 10), bg="blue", fg="yellow") self.lblDisk = tk.Label(self, text="Disk storage : ", font=("Helvetica", 10), bg="blue", fg="yellow") self.lblLocal = tk.Label(self, text="Localhost : ", font=("Helvetica", 10), bg="blue", fg="yellow") self.lblNet = tk.Label(self, text="Network Status : ", font=("Helvetica", 10), bg="blue", fg="yellow") self.lblMemo = tk.Label(self, text="Memory usage : ", font=("Helvetica", 10), bg="blue", fg="yellow") self.lblDate = tk.Label(self, text="Select Date : ", font=("Helvetica", 10), bg="blue", fg="yellow") self.lblSelect = tk.Label( self, text="Please select one record below to update or delete", font=("Helvetica", 10), bg="blue", fg="yellow") #MESSAGE self.lblSearch = tk.Label(self, text="Please Enter System ID:", font=("Helvetica", 10), bg="blue", fg="yellow") #ENTRIES self.entName = tk.Entry(self) self.entCPU = tk.Entry(self) self.entDisk = tk.Entry(self) self.entLocal = tk.Entry(self) self.entNet = tk.Entry(self) self.entMemo = tk.Entry(self) self.entSearch = tk.Entry(self) self.entDate = DateEntry(self, width=12, background='darkblue', foreground='white', borderwidth=2, year=2021, locale='en_US', date_pattern='y-mm-dd') #BUTTONS self.btnRegister = tk.Button(self, text="Register", font=("Helvetica", 11), bg="yellow", fg="blue", command=self.register_desktop) self.btnUpdate = tk.Button(self, text="Update", font=("Helvetica", 11), bg="yellow", fg="blue", command=self.update_desktop) self.btnDelete = tk.Button(self, text="Delete", font=("Helvetica", 11), bg="yellow", fg="blue", command=self.delete_desktop_data) self.btnClear = tk.Button(self, text="Clear", font=("Helvetica", 11), bg="yellow", fg="blue", command=self.clear_form) self.btnShowAll = tk.Button(self, text="Show All", font=("Helvetica", 11), bg="yellow", fg="blue", command=self.load_desktop_data) self.btnSearch = tk.Button(self, text="Search", font=("Helvetica", 11), bg="yellow", fg="blue", command=self.show_search_record) self.btnExit = tk.Button(self, text="Exit", font=("Helvetica", 11), bg="yellow", fg="blue", command=self.exit) #TABLE(TREEVIEW) columns = ("#1", "#2", "#3", "#4", "#5", "#6", "#7", "#8") self.tvDesktop = ttk.Treeview(self, show="headings", height="50", columns=columns) self.tvDesktop.heading('#1', text='DeskID', anchor='center') self.tvDesktop.column('#1', width=10, anchor='center', stretch=True) self.tvDesktop.heading('#2', text='UserName', anchor='center') self.tvDesktop.column('#2', width=10, anchor='center', stretch=True) self.tvDesktop.heading('#3', text='Processor', anchor='center') self.tvDesktop.column('#3', width=12, anchor='center', stretch=True) self.tvDesktop.heading('#4', text='Storage', anchor='center') self.tvDesktop.column('#4', width=12, anchor='center', stretch=True) self.tvDesktop.heading('#5', text='Localhost', anchor='center') self.tvDesktop.column('#5', width=12, anchor='center', stretch=True) self.tvDesktop.heading('#6', text='Network', anchor='center') self.tvDesktop.column('#6', width=12, anchor='center', stretch=True) self.tvDesktop.heading('#7', text='Memory', anchor='center') self.tvDesktop.column('#7', width=12, anchor='center', stretch=True) self.tvDesktop.heading('#8', text='Date', anchor='center') self.tvDesktop.column('#8', width=10, anchor='center', stretch=True) #SCROLL BARS vsb = ttk.Scrollbar(self, orient=tk.VERTICAL, command=self.tvDesktop.yview) vsb.place(x=40 + 640 + 1, y=310, height=180 + 20) self.tvDesktop.configure(yscroll=vsb.set) hsb = ttk.Scrollbar(self, orient=tk.HORIZONTAL, command=self.tvDesktop.xview) hsb.place(x=40, y=310 + 200 + 1, width=620 + 20) self.tvDesktop.configure(xscroll=hsb.set) self.tvDesktop.bind("<<TreeviewSelect>>", self.show_selected_record) #LABELS self.lblTitle.place(x=270, y=27, height=30, width=300) self.lblName.place(x=30, y=70, height=25, width=125) self.lblCPU.place(x=30, y=115, height=25, width=125) self.lblDisk.place(x=30, y=160, height=25, width=125) self.lblLocal.place(x=410, y=70, height=25, width=125) self.lblNet.place(x=410, y=115, height=25, width=125) self.lblMemo.place(x=410, y=160, height=25, width=125) self.lblDate.place(x=30, y=205, height=25, width=125) self.lblSearch.place(x=30, y=560, height=25, width=225) self.lblSelect.place(x=166, y=290, height=20, width=436) #ENTRIES self.entName.place(x=170, y=70, height=25, width=225) self.entCPU.place(x=170, y=115, height=25, width=225) self.entDisk.place(x=170, y=160, height=25, width=225) self.entLocal.place(x=550, y=70, height=25, width=225) self.entNet.place(x=550, y=115, height=25, width=225) self.entMemo.place(x=550, y=160, height=25, width=225) self.entDate.place(x=170, y=205, height=25, width=225) self.entSearch.place(x=270, y=560, height=25, width=225) #BUTTONS self.btnUpdate.place(x=98, y=250, height=25, width=106) self.btnDelete.place(x=234, y=250, height=25, width=106) self.btnRegister.place(x=370, y=250, height=25, width=106) self.btnClear.place(x=506, y=250, height=25, width=106) self.btnShowAll.place(x=642, y=250, height=25, width=106) self.btnSearch.place(x=505, y=558, height=45, width=114) self.btnExit.place(x=649, y=558, height=45, width=114) self.tvDesktop.place(x=40, y=310, height=200, width=640) self.create_table() self.load_desktop_data() def clear_form(self): self.entName.delete(0, tk.END) self.entCPU.delete(0, tk.END) self.entDisk.delete(0, tk.END) self.entLocal.delete(0, tk.END) self.entNet.delete(0, tk.END) self.entMemo.delete(0, tk.END) self.entDate.delete(0, tk.END) def exit(self): MsgBox = mb.askquestion( 'Exit Application', 'Are you sure you want to exit the application?', icon='warning') if MsgBox == 'yes': self.destroy() def delete_desktop_data(self): MsgBox = mb.askquestion( 'Delete Record', 'Are you sure! you want to delete selected desktop record?', icon='warning') if MsgBox == 'yes': if db_connection.is_connected() == False: db_connection.connect() db_cursor.execute("USE Desktop") # Interact with Database # deleteing selected Desktop record Delete = "DELETE FROM Desktop_master WHERE deskno='%s'" % (Desk_Number) db_cursor.execute(Delete) db_connection.commit() mb.showinfo("Information", "Desktop Record Deleted Succssfully") self.load_desktop_data() self.entName.delete(0, tk.END) self.entCPU.delete(0, tk.END) self.entDisk.delete(0, tk.END) self.entLocal.delete(0, tk.END) self.entNet.delete(0, tk.END) self.entMemo.delete(0, tk.END) self.entDate.delete(0, tk.END) def create_table(self): if db_connection.is_connected() == False: db_connection.connect() # executing cursor with execute method and pass SQL query db_cursor.execute("CREATE DATABASE IF NOT EXISTS Desktop" ) # Create a Database named Desktop db_cursor.execute("USE Desktop") # Interact with Desktop Database # creating required tables db_cursor.execute( "CREATE TABLE IF NOT EXISTS Desktop_master(Id INT(10) NOT NULL PRIMARY KEY AUTO_INCREMENT,deskno INT(15),uname VARCHAR(30),CPU VARCHAR(30), disk VARCHAR(30), localhost VARCHAR(30),network VARCHAR(30), memory VARCHAR(30), joindate DATE)AUTO_INCREMENT=1" ) db_connection.commit() def register_desktop(self): if db_connection.is_connected() == False: db_connection.connect() name_data = self.entName.get() CPU_data = self.entCPU.get() disk_data = self.entDisk.get() local_data = self.entLocal.get() network_data = self.entNet.get() memory_data = self.entMemo.get() date_data = self.entDate.get() #ALERT USER FOR EMPTY FIELDS if name_data == "": mb.showinfo('Information', "Please Enter Name") self.entName.focus_set() return if CPU_data == "": mb.showinfo('Information', "Please Enter CPU Stat") self.entCPU.focus_set() return if disk_data == "": mb.showinfo('Information', "Please Enter Disk Stat") self.entDisk.focus_set() return if local_data == "": mb.showinfo('Information', "Please Enter Localhost Stat") self.entLocal.focus_set() return if network_data == "": mb.showinfo('Information', "Please Enter Network Stat") self.entNet.focus_set() return if memory_data == "": mb.showinfo('Information', "Please Enter Memory Stat") self.entMemo.focus_set() return if date_data == "": mb.showinfo('Information', "Please Enter the Date") self.entDate.focus_set() return # Inserting record into Desktop_master table of Desktop database try: deskno = int(self.fetch_max_desk_no()) print("New Desktop Id: " + str(deskno)) query2 = "INSERT INTO Desktop_master (deskno, uname, CPU, disk, localhost, network, memory, joindate) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)" # implement query Sentence db_cursor.execute( query2, (deskno, name_data, CPU_data, disk_data, local_data, network_data, memory_data, date_data)) mb.showinfo('Information', "Desktop Registration Successfully") # Submit to database for execution db_connection.commit() self.load_desktop_data() except mysql.connector.Error as err: print(err) # Rollback in case there is any error db_connection.rollback() mb.showinfo('Information', "Data Insertion Failed!!!") finally: db_connection.close() def fetch_max_desk_no(self): if db_connection.is_connected() == False: db_connection.connect() db_cursor.execute("USE Desktop") # Interact with desktop Database deskno = 0 query1 = "SELECT deskno FROM Desktop_master order by id DESC LIMIT 1" # implement query Sentence db_cursor.execute(query1) # Retrieving maximum desktop id no print("No of Records Fetched:" + str(db_cursor.rowcount)) if db_cursor.rowcount == 0: deskno = 1 else: rows = db_cursor.fetchall() for row in rows: deskno = row[0] deskno = deskno + 1 print("Max desktop Id: " + str(deskno)) return deskno def show_search_record(self): if db_connection.is_connected() == False: db_connection.connect() s_desk_no = self.entSearch.get() print(s_desk_no) if s_desk_no == "": mb.showinfo('Information', "Please Enter Desktop Number") self.entSearch.focus_set() return self.tvDesktop.delete(*self.tvDesktop.get_children()) db_cursor.execute("USE Desktop") query3 = "SELECT deskno, uname, CPU, disk, localhost, network, memory, date_format(joindate,'%d-%m-%Y') FROM Desktop_master WHERE deskno='" + s_desk_no + "'" db_cursor.execute(query3) total = db_cursor.rowcount print("Total Desktops : " + str(total)) rows = db_cursor.fetchall() Desk_No = "" User_Name = "" CPU_Stat = "" disk_Stat = "" local_Stat = "" net_Stat = "" memo_Stat = "" date_Stat = "" for row in rows: Desk_No = row[0] User_Name = row[1] CPU_Stat = row[2] disk_Stat = row[3] local_Stat = row[4] net_Stat = row[5] memo_Stat = row[6] date_Stat = row[7] print("Desk Number: " + str(Desk_No)) self.tvDesktop.insert("", 'end', text=Desk_No, values=(Desk_No, User_Name, CPU_Stat, disk_Stat, local_Stat, net_Stat, memo_Stat, date_Stat)) def show_selected_record(self, event): self.clear_form() for selection in self.tvDesktop.selection(): item = self.tvDesktop.item(selection) global Desk_Number Desk_Number, PCname, PCcpu, PCdisk, PClocal, PCnet, PCmem, PCdate = item[ "values"][0:8] self.entName.insert(0, PCname) self.entCPU.insert(0, PCcpu) self.entDisk.insert(0, PCdisk) self.entLocal.insert(0, PClocal) self.entNet.insert(0, PCnet) self.entMemo.insert(0, PCmem) self.entDate.insert(0, PCdate) return Desk_Number def update_desktop(self): if db_connection.is_connected() == False: db_connection.connect() print("Updating") db_cursor.execute("USE Desktop") User_Name = self.entName.get() CPU_Stat = self.entCPU.get() disk_Stat = self.entDisk.get() local_Stat = self.entLocal.get() net_Stat = self.entNet.get() memo_Stat = self.entMemo.get() date_Stat = self.entDate.get() print(Desk_Number) query4 = "UPDATE Desktop_master SET uname='%s', CPU='%s', disk='%s', localhost='%s', network='%s', memory='%s', joindate='%s' WHERE deskno='%s'" % ( User_Name, CPU_Stat, disk_Stat, local_Stat, net_Stat, memo_Stat, date_Stat, Desk_Number) db_cursor.execute(query4) db_connection.commit() mb.showinfo("Info", "Selected Desktop Record Updated Successfully ") self.load_desktop_data() def load_desktop_data(self): if db_connection.is_connected() == False: db_connection.connect() self.entDate.delete(0, tk.END) self.tvDesktop.delete(*self.tvDesktop.get_children()) db_cursor.execute("USE Desktop") query5 = "SELECT deskno, uname, CPU, disk, localhost, network, memory, date_format(joindate,'%d-%m-%Y') FROM Desktop_master" db_cursor.execute(query5) total = db_cursor.rowcount #if total ==0: #mb.showinfo("Info", "Nothing To Display,Please add data") #return print("Total Data Entries:" + str(total)) rows = db_cursor.fetchall() Desk_No = "" User_Name = "" CPU_Stat = "" disk_Stat = "" local_Stat = "" net_Stat = "" memo_Stat = "" date_Stat = "" for row in rows: Desk_No = row[0] User_Name = row[1] CPU_Stat = row[2] disk_Stat = row[3] local_Stat = row[4] net_Stat = row[5] memo_Stat = row[6] date_Stat = row[7] self.tvDesktop.insert("", 'end', text=Desk_No, values=(Desk_No, User_Name, CPU_Stat, disk_Stat, local_Stat, net_Stat, memo_Stat, date_Stat))
class oneway: def __init__(self, user, window): self.search_by = StringVar() self.search_txt = StringVar() self.list2 = [{ 'name': 'Select', 'price': [] }, { 'name': 'Economy', 'price': 3000 }, { 'name': 'Premium Economy', 'price': 4000 }, { 'name': 'Business Class', 'price': 5000 }, { 'name': 'First Class', 'price': 6000 }] # Get the names of the all flights name self.names = list(map(lambda x: x.get('name'), self.list2)) print(self.names) self.window = window self.user_id = user self.item_index = [] self.user = user self.window.title('User Form') self.window.geometry('1100x650+90+40') self.frame1 = Frame(self.window, bg='#37474F') self.frame1.place(x=0, y=0, height=650, width=1100) self.frame2 = Frame(self.frame1, bg='white', bd=1, relief=RIDGE) self.frame2.place(x=390, y=130, height=360, width=630) self.label_name = Label(self.frame1, text="One Way Flight", font=('Impact', 20, 'bold'), fg="white", bg='#37474F') self.label_name.place(x=300, y=15) time1 = StringVar() time1.set(time.strftime('%H:%M:%S:%p')) self.ent_where = Label(self.frame1, font=('times new roman', 25), fg='white', bg='#37474F', textvariable=time1) self.ent_where.place(x=60, y=5) self.label_name = Label(self.frame1, text="Where From:", font=('Goudy old style', 12, 'bold'), fg='white', bg='#37474F') self.label_name.place(x=50, y=90) self.ent_where = Entry(self.frame1, font=('times new roman', 9), bg='lightgray') self.ent_where.place(x=170, y=90, width=200, height=30) self.label_name = Label(self.frame1, text="Where To:", font=('Goudy old style', 12, 'bold'), fg='white', bg='#37474F') self.label_name.place(x=50, y=140) self.ent_to = Entry(self.frame1, font=('times new roman', 9), bg='lightgray') self.ent_to.place(x=170, y=140, width=200, height=30) self.label_name = Label(self.frame1, text="Departure Date:", font=('Goudy old style', 12, 'bold'), fg='white', bg='#37474F') self.label_name.place(x=50, y=190) self.ent_dpt = DateEntry(self.frame1, width=12, background='darkblue', foreground='white', borderwidth=2) self.ent_dpt.place(x=170, y=190, width=200) ttk.Button(self.frame1, text="ok") self.combo = Label(self.frame1, text="Age Selection:", font=('Goudy old style', 12, 'bold'), fg='white', bg='#37474F').place(x=50, y=240) self.txt_combo = ttk.Combobox(self.frame1, font=('times new roman', 9), state='readonly', justify=CENTER) self.txt_combo['values'] = ('select', 'Adult', 'Children', 'Infant', 'Old age') self.txt_combo.place(x=170, y=240) self.txt_combo.current(0) self.label_name = Label(self.frame1, text="Count:", font=('Goudy old style', 12, 'bold'), fg='white', bg='#37474F') self.label_name.place(x=50, y=290) self.ent_count = Entry(self.frame1, font=('times new roman', 9), bg='lightgray') self.ent_count.place(x=170, y=290, width=200, height=30) self.classcombo = Label(self.frame1, text="Class Selection:", font=('Goudy old style', 12, 'bold'), fg='white', bg='#37474F').place(x=50, y=340) self.txt_classcombo = ttk.Combobox(self.frame1, font=('times new roman', 9), state='readonly', justify=CENTER, values=self.names) # self.txt_classcombo['values'] = ('Economy', 'Premium Economy', 'Business Class', 'First Class') self.txt_classcombo.bind('<<ComboboxSelected>>', self.fetch_data) self.txt_classcombo.place(x=170, y=340) self.txt_classcombo.current(0) self.label_price = Label(self.frame1, text="Price:", font=('Goudy old style', 12, 'bold'), fg='white', bg='#37474F') self.label_price.place(x=50, y=390) self.ent_price = Entry(self.frame1, font=('times new roman', 9), bg='lightgray') self.ent_price.place(x=170, y=390, width=200, height=30) self.ent_price.insert(0, '') self.flight = Label(self.frame1, text="Flight Selection:", font=('Goudy old style', 12, 'bold'), fg='white', bg='#37474F').place(x=50, y=440) self.txt_flight = ttk.Combobox(self.frame1, font=('times new roman', 9), state='readonly', justify=CENTER) self.txt_flight['values'] = ('select', 'Buddha Air', 'Yeti Airlines', 'Surya Airline', 'Nepal Airlines', 'Tara Airlines') self.txt_flight.place(x=170, y=440) self.txt_flight.current(0) self.item_entry = Entry(self.window, textvariable=self.search_txt) self.item_entry.place(x=400, y=90) self.txt_combo_1 = ttk.Combobox(self.frame1, textvariable=self.search_by, font=('times new roman', 9), state='readonly', justify=CENTER) self.txt_combo_1['values'] = ('flight_name', 'destination', 'class_selection') self.txt_combo_1.place(x=600, y=90) self.txt_combo_1.current(0) self.btn_add = Button(self.window, text="Search", command=self.Search_items) self.btn_add.place(x=800, y=90) self.btn_book = Button(self.frame1, text="Book Flight", relief=RAISED, bg='#001C55', font=('arial', 14, 'bold'), fg='white', command=self.book_flight) self.btn_book.place(x=100, y=550) self.btn_book = Button(self.frame1, text="Cancel Flight", relief=RAISED, bg='#00072D', font=('arial', 14, 'bold'), fg='white', command=self.delete_item) self.btn_book.place(x=540, y=550) self.btn_book = Button(self.frame1, text="Bill", relief=RAISED, bg='#00072D', font=('arial', 14, 'bold'), fg='white', command=self.generate_bill) self.btn_book.place(x=700, y=550) self.btn_book = Button(self.frame1, text="Update", relief=RAISED, bg='#00072D', font=('arial', 14, 'bold'), fg='white', command=self.update) self.btn_book.place(x=800, y=550) scroll_x = Scrollbar(self.frame2, orient=HORIZONTAL) self.bg1 = ImageTk.PhotoImage( file= 'C:\\Users\\Dell\\PycharmProjects\\untitled3\\project\\Webp.net-resizeimage (3).png' ) self.btn4 = Button(self.window, image=self.bg1, text='Logout', relief=RAISED, bg='#37474F', font=('arial', 14, 'bold'), fg='white', bd=0, command=exit) self.btn4.place(x=1000, y=7, width=90) self.item_tree = ttk.Treeview( self.frame2, selectmode='browse', columns=('ID', 'Where from', 'Where to', 'Departure Date', 'Age Selection', 'Count', 'Class Selection', 'User_id', 'Flight_Name', 'Price'), xscrollcommand=scroll_x.set) self.item_tree.pack(fill=BOTH, expand=1) #self.item_tree.place(x=390,y=120) scroll_x.pack(side=BOTTOM, fill=X) scroll_x.config(command=self.item_tree.xview) self.item_tree['show'] = 'headings' self.item_tree.column('ID', width=90, anchor='center') self.item_tree.column('Where from', width=90, anchor='center') self.item_tree.column('Where to', width=90, anchor='center') self.item_tree.column('Departure Date', width=90, anchor='center') self.item_tree.column('Age Selection', width=90, anchor='center') self.item_tree.column('Count', width=90, anchor='center') self.item_tree.column('Class Selection', width=90, anchor='center') self.item_tree.column('User_id', width=90, anchor='center') self.item_tree.column('Flight_Name', width=90, anchor='center') self.item_tree.column('Price', width=90, anchor='center') self.item_tree.heading('ID', text="ID") self.item_tree.heading('Where from', text="Where from") self.item_tree.heading('Where to', text="Where to") self.item_tree.heading('Departure Date', text="Departure Date") self.item_tree.heading('Age Selection', text="Age Selection") self.item_tree.heading('Count', text="Count") self.item_tree.heading('Class Selection', text="Class Selection") self.item_tree.heading('User_id', text="User ID") self.item_tree.heading('Flight_Name', text="Flight_Name") self.item_tree.heading('Price', text="Price") # scroll_x = Scrollbar(manage_teacher_frame2_1, orient=HORIZONTAL) # # scroll_x.pack(side=BOTTOM, fill=X) # scroll_x.config(command=self.teacher_tree.xview) # scroll_y.pack(side=RIGHT, fill=Y) # self.item_treeScrollbar=ttk.Scrollbar(self.window,orient='horizontal',command=self.item_tree.xview) # self.item_tree.configure(xscroll=self.item_treeScrollbar.set) # self.item_treeScrollbar.pack(side=BOTTOM,fill=X) self.show_in_treeview() def clear(self): self.ent_where.delete(0, END) self.ent_to.delete(0, END) self.ent_dpt.delete(0, END) self.txt_combo.set('') self.ent_count.delete(0, END) self.txt_classcombo.set('') # def logout(self): # messagebox.showinfo('Message','Do you want to log out') # import login2 # self.window.withdraw() # dd = Toplevel(self.window) # # login2.Login(dd) def update(self): selected_item = self.item_tree.selection()[0] self.item_index = self.item_tree.item(selected_item, 'text') item_data = self.item_tree.item(selected_item, 'values') if item_data[0] == '': messagebox.showerror('error', 'select a row') else: if form2.Item_dlt().update_items(item_data[0], self.ent_where.get(), self.ent_to.get(), self.ent_dpt.get_date(), self.txt_combo.get(), self.ent_count.get(), self.txt_classcombo.get(), self.txt_flight.get(), self.ent_price.get(), self.user_id): messagebox.showinfo("Item", "Booking Updated") self.show_in_treeview() else: messagebox.showerror("Error", "Booking Details cannot be added") def book_flight(self): if self.ent_where.get() == "" or self.ent_to.get( ) == "" or self.ent_dpt.get() == "" or self.txt_combo.get( ) == "" or self.ent_count.get() == "" or self.txt_classcombo.get( ) == "": messagebox.showerror('Error', 'please enter all required fields') else: try: form2.oneway_flight().oneway_reg(self.ent_where.get(), self.ent_to.get(), self.ent_dpt.get_date(), self.txt_combo.get(), self.ent_count.get(), self.txt_classcombo.get(), self.user_id, self.txt_flight.get(), self.ent_price.get()) messagebox.showinfo('success', 'Register successfull', parent=self.window) self.show_in_treeview() #self.clear() except Exception as e: messagebox.showerror('error', f'error:{str(e)}', parent=self.window) def fetch_data(self, *args): va = filter(lambda x: x.get('name') == self.txt_classcombo.get(), self.list2) self.ent_price.delete(0, END) self.ent_price.insert(0, next(va).get('price')) def select_item(self, event): selected_item = self.item_tree.selection()[0] self.item_index = self.item_tree.item(selected_item, 'text') item_data = self.item_tree.item(selected_item, 'values') self.ent_where.delete(0, END) self.ent_where.insert(0, item_data[1]) self.ent_to.delete(0, END) self.ent_to.insert(0, item_data[2]) #dpt_date_f=datetime.datetime.strptime(int(item_data[2]/3), '%Y-%m-%d').strftime('%m/%d/%y') dpt_date = datetime.datetime(int(item_data[3][0:4]), int(item_data[3][5:7]), int(item_data[3][8:10])) dpt_date_f = dpt_date.strftime('%m/%d/%y') self.ent_dpt.set_date(dpt_date_f) self.txt_combo.set(item_data[4]) self.txt_combo.current() self.ent_count.delete(0, END) self.ent_count.insert(0, item_data[5]) self.txt_classcombo.set(item_data[6]) self.txt_classcombo.current() self.txt_flight.set(item_data[8]) self.txt_flight.current() self.ent_price.delete(0, END) self.ent_price.insert(0, item_data[9]) def show_in_treeview(self): # # qry = 'select * from oneway where user_id=%s' # self.my_cursor.execute(qry,(self.user_id)) row = form2.show_flight().show_in_treeview(self.user_id) # spot_marker = 0 # while spot_marker < len(row): # for num in range(spot_marker, len(row)): # if row[num] < row[spot_marker]: # row[spot_marker], row[num] = row[num], row[spot_marker] # spot_marker += 1 # print(row) if row: self.item_tree.delete(*self.item_tree.get_children()) for i in row: #self.tree.item(idx)['text'] self.item_tree.insert("", "end", text=i[0], value=(i[0], i[1], i[2], i[3], i[4], i[5], i[6], i[7], i[8], i[9])) # self.my_connection.commit() self.item_tree.bind('<Double-1>', self.select_item) def Search_items(self): con = mysql.connector.connect(host='localhost', user='******', password='', database='register') cur = con.cursor() values = ( str(self.search_by.get()), '"{}"'.format(str(self.search_txt.get() + '%')), ) qry = ( f"SELECT ID,destination,source,dpt,combo,count_no,class_selection,user_id,flight_name,price FROM oneway WHERE user_id={self.user_id} AND {values[0]} LIKE {values[1]} " ) cur.execute(qry) rows = cur.fetchall() if len(rows) != 0: self.item_tree.delete(*self.item_tree.get_children()) for row in rows: self.item_tree.insert("", END, values=row) con.commit() def valid(self): if self.ent_where.get() == "" or self.ent_to.get( ) == "" or self.ent_dpt.get() == "" or self.txt_combo.get( ) == "" or self.ent_count.get() == "" or self.txt_classcombo.get( ) == "": messagebox.showerror('Error', 'please enter all required fields') return False else: return True def delete_item(self): selected_item = self.item_tree.selection()[0] item_data = self.item_tree.item(selected_item, 'text') index = item_data if form2.Item_dlt().delete_items(index): messagebox.showinfo('Item', 'Item Deleted') self.show_in_treeview() # selected_item = self.item_tree.selection() # self.item_tree.delete(selected_item) else: messagebox.showerror("Error", "Item cannot be deleted", parent=self.window) def generate_bill(self): all_orders = self.item_tree.get_children() bill_list = [] total = 0 # tbl=self.order_tree.item(all_orders[0],'values')[0] # name=self.order_tree.item(all_orders[1],'values')[1] for i in all_orders: order = self.item_tree.item(i, 'values') amt = float(order[5]) * float(order[9]) bill_list.append((order[2], order[3], order[4], order[5], order[6], order[8], order[9], amt)) total += amt BillView(bill_list, total, self.user)
class MainWindow(tk.Frame): def __init__(self, master=None): super().__init__(master) self.master = master self.master.title("Delivery Accountant") self.master.minsize(1440, 1080) self.master.resizable(True, True) # create_tables() # draws searching engine self.duedate_dockets() # additional info for dates self.customer_info = self.draw_info(CUSTOMER, pos_x=2, pos_y=0, span_x=2, span_y=1) self.vendor_info = self.draw_info(VENDOR, pos_x=2, pos_y=1, span_x=2, span_y=1) self.draw_dates(pos_x=4, pos_y=0, span_x=2, span_y=1) self.draw_notes(pos_x=4, pos_y=1, span_x=2, span_y=2) self.draw_tasks(12, pos_x=2, pos_y=4, span_x=4, span_y=2) self.delivery_info(pos_x=6, pos_y=0, span_x=1, span_y=1) self.draw_menu() self.update_customer_combobox() self.update_vendor_combobox() # the only button for now in this app self.btn_submit = ttk.Button(text="submit") self.btn_submit.grid(column=0, row=11, columnspan=2, rowspan=2, sticky="NESW") def duedate_dockets(self): # search engine UI self.label_frame_search = tk.LabelFrame(text="Search") self.label_frame_search.grid(column=0, row=0, columnspan=2, rowspan=6, pady=10, padx=10, sticky="NESW") self.search_entry = tk.Entry(self.label_frame_search, bg=BASECOLOR, font=ENTRYFONT) self.search_entry.bind("<Return>", self.update_dockets_list) self.search_entry.grid(column=0, row=0) data = request_recent() self.list_dockets(data=data) def draw_menu(self): """Creates menue in the app""" self.menubar = tk.Menu(self.master) self.editmenu = tk.Menu(self.menubar, tearoff=0) self.editmenu.add_command(label="New Customer", command=lambda: self.new_partner(CUSTOMER)) self.editmenu.add_command(label="New Vendor", command=lambda: self.new_partner(VENDOR)) self.editmenu.add_command(label="New Delivery", command=self.new_delivery) self.menubar.add_cascade(label="Edit", menu=self.editmenu) # self.menubar.add_command(label="Report", command=report_open_tasks) self.menubar.add_command(label="Test database", command=self.db_test) self.master.config(menu=self.menubar) # UI labels with dockets def db_test(self): create_tables() def update_dockets_list(self, event): num = self.search_entry.get() self.update_by_docket(event, docket=int(num)) self.list_dockets(data=request_recent()) def new_delivery(self): self.set_active() self.clear_entries() self.clear_by_partner(CUSTOMER) self.clear_by_partner(VENDOR) self.btn_submit.configure(command=self.read_delivery_entries) def list_dockets(self, data=None, dockets=None): """ parameter: data(list) includes list of strings to show """ """if data is None: data = [] for i in range(0, LENGTH_DOCKETS): data.append("Max and Co. \n # 30041") """ # dont forget that there maybe less data than dockets! self.docket_labels = [] font_list = None for i, obj in enumerate(data): if i % 2 == 0: font_list = SECONDARYCOLOR else: font_list = BASECOLOR # concatincates dict wit empty string text = "" for k, v in obj.items(): text = text + str(k) + " : " + str(v) + "\n" label = tk.Label(self.label_frame_search, text=text, bg=font_list) label.grid(column=0, row=i + 1, sticky="NESW") label.bind("<Double-Button-1>", self.update_by_docket) self.docket_labels.append(label) # creates the label with data and packs it with grid def delivery_info(self, pos_x, pos_y, span_x, span_y): """ draws delivery information of the form """ self.label_frame_delivery = tk.LabelFrame(self.master, text="Delivery Info") self.label_frame_delivery.grid(column=pos_x, row=pos_y, columnspan=2, sticky="NEW", padx=10, pady=10) self.deliver_address = tk.Label(self.label_frame_delivery, text="Delivery Address") self.deliver_address.grid(column=0, row=0) self.entry_del_address = tk.Entry(self.label_frame_delivery, width=30) self.entry_del_address.grid(column=1, row=0) def draw_info(self, name, pos_x, pos_y, span_x, span_y): """ :parameter: labels: (bool) show the requirement of label of entry :parameter: name: whos info is going to showed up :return: (list) returns two lists that have information about state """ label_frame = tk.LabelFrame(self.master, text="{} Info".format(name)) label_frame.grid(column=pos_x, row=pos_y, columnspan=span_x, rowspan=span_y, pady=10, padx=10, sticky="NESW") # TODO backend method that returns all customers combobox = ttk.Combobox(label_frame, values=[], font=ENTRYFONT) combobox.grid(column=0, row=0, sticky="NESW") if name == CUSTOMER: combobox.bind("<<ComboboxSelected>>", self.update_customer_info) elif name == VENDOR: combobox.bind("<<ComboboxSelected>>", self.update_vendor_info) name_label = tk.Label(label_frame, text="{} Name".format(name), font=BASICFONT) name_label.grid(column=0, row=1, sticky="W") address_label = tk.Label(label_frame, text="Address", font=BASICFONT) address_label.grid(column=0, row=2, sticky="W") phone_label = tk.Label(label_frame, text="Phone", font=BASICFONT) phone_label.grid(column=0, row=3, sticky="W") contact_label = tk.Label(label_frame, text="Contact", font=BASICFONT) contact_label.grid(column=0, row=4, sticky="W") # if need lbels than it is going to draw labels, if not draw entries name = tk.Entry(label_frame, width=30) name.grid(column=1, row=1, sticky="NESW") address = tk.Entry(label_frame, width=30) address.grid(column=1, row=2, sticky="NESW") phone = tk.Entry(label_frame, width=30) phone.grid(column=1, row=3, sticky="NESW") contact = tk.Entry(label_frame, width=30) contact.grid(column=1, row=4, sticky="NESW") return [[name_label, address_label, phone_label, contact_label], [combobox, name, address, phone, contact]] def draw_dates(self, pos_x, pos_y, span_x, span_y): # ui for date widget self.label_frame_dates = tk.LabelFrame(text="About Dates") self.label_frame_dates.grid(column=pos_x, row=pos_y, columnspan=span_x, rowspan=span_y, padx=10, pady=10, sticky="NEW") # date labels self.date_client = tk.Label(self.label_frame_dates, text="Client", font=BASICFONT) self.date_client.grid(column=0, row=0, sticky="W") self.date_required = tk.Label(self.label_frame_dates, text="Requested", font=BASICFONT) self.date_required.grid(column=0, row=1, sticky="w") self.date_ship = tk.Label(self.label_frame_dates, text="Shipment", font=BASICFONT) self.date_ship.grid(column=0, row=2, sticky="w") self.entry_client = DateEntry(self.label_frame_dates, font=ENTRYFONT) self.entry_client.grid(column=1, row=0, sticky="w") self.entry_required = DateEntry(self.label_frame_dates, font=ENTRYFONT) self.entry_required.grid(column=1, row=1, sticky="w") self.entry_ship = DateEntry(self.label_frame_dates, font=ENTRYFONT) self.entry_ship.grid(column=1, row=2, sticky="w") def draw_tasks(self, length, pos_x, pos_y, span_x, span_y): """ draws tasks in this format Task: goal(string) | checkbox(bool) | target date(date) :parameter: length: (integer) tells how any tasks to draw """ self.tasks = [] self.label_frame_tasks = tk.LabelFrame(text="Tasks") self.label_frame_tasks.grid(column=pos_x, row=pos_y, columnspan=span_x, rowspan=span_y, padx=10, pady=10) self.task_label = tk.Label(self.label_frame_tasks, text="Tasks") self.task_label.grid(column=0, row=0) self.done_label = tk.Label(self.label_frame_tasks, text="Done") self.done_label.grid(column=1, row=0) self.task_date_label = tk.Label(self.label_frame_tasks, text="Date") self.task_date_label.grid(column=2, row=0) self.task_date_must_label = tk.Label(self.label_frame_tasks, text="Must Date") self.task_date_must_label.grid(column=3, row=0) for i in range(0, length): entry = tk.Entry(self.label_frame_tasks, width="75") entry.grid(column=0, row=i + 1) check = tk.BooleanVar() check_button = tk.Checkbutton(self.label_frame_tasks, var=check) check_button.grid(column=1, row=i + 1) date = DateEntry(self.label_frame_tasks, width="25") date.grid(column=2, row=i + 1) date.configure(state="readonly") date_must = DateEntry(self.label_frame_tasks, width="25") date_must.grid(column=3, row=i + 1) date_must.configure(state="readonly") self.tasks.append([entry, check_button, date, check, date_must]) def draw_notes(self, pos_x, pos_y, span_x, span_y): self.notes_frame = tk.LabelFrame(text="Notes") self.notes_frame.grid(column=pos_x, row=pos_y, columnspan=span_x, rowspan=span_y, sticky="NESW") self.notes = tk.Text(self.notes_frame, height=9, width=35, font=ENTRYFONT) self.notes.grid(column=0, row=0) def update_customer_info(self, event): data = request_partner_info(CUSTOMER_DB, self.customer_info[1][0].get()) if data is None: pass else: self.activate_info_entries(CUSTOMER) for n, d in data: self.customer_info[1][n + 1].delete(0, tk.END) self.customer_info[1][n + 1].insert(0, str(d)) self.deactivate_info_entries(CUSTOMER, include=False) # return [[name_label, address_label, phone_label, contact_label], # [combobox, name, address, phone, contact]] def update_customer_combobox(self): """ updates info on customer frame """ tmp = [] for i in request_partners(CUSTOMER_DB): tmp.append(i["name"]) self.customer_info[1][0].configure(values=tmp) def update_vendor_combobox(self): tmp = [] for i in request_partners(VENDOR_DB): tmp.append(i["name"]) self.vendor_info[1][0].configure(values=tmp) def update_vendor_info(self, event): data = request_partner_info(VENDOR_DB, self.vendor_info[1][0].get()) if data is None: pass else: self.activate_info_entries(VENDOR) for n, d in enumerate(data): self.vendor_info[1][n + 1].delete(0, tk.END) self.vendor_info[1][n + 1].insert(1, str(d)) self.deactivate_info_entries(VENDOR, include=False) def update_by_docket(self, event, docket=None): # this method parses widget text because of the explained below """ found intersting bug(probably just the thing that not all people know) in python if you bind label(may work with other widgets) in a loop(which uses range(0,somenumber)) with the callback the last value of i or other iterator will be passed to function! """ self.set_active() self.clear_tasks() # docket, customer, vendor, completed_tasks, date_client, date_require, # date_shipment, tasks, note, delivery address data = None if docket is None: docket = int(event.widget["text"].split("\n")[0].split(" ")[2]) data = request_by_docket(docket) else: data = request_by_docket(docket) if data is None: # create a message that will say that something wrong was inputed self.clear_entries() self.clear_by_partner(CUSTOMER) self.clear_by_partner(VENDOR) self.clear_tasks() else: print(data) func = lambda: update_docket(docket, self.read_tasks()) self.btn_submit.configure(command=func) # fields in dictionary are the same as fields in docket # update customer info self.customer_info[1][0].current( self.customer_info[1][0]["values"].index((data["customer"]))) self.update_customer_info(None) # none instead of event as update does # not depend on event variables # update vendor info self.vendor_info[1][0].current( self.vendor_info[1][0]["values"].index((data["vendor"]))) self.update_vendor_info(None) # update dates self.insert_dates([ data["date_client"], data["date_request"], data["date_shipmet"] ]) # update tasks dont forget that # at some point it should turn from bytes -> tuple -> string self.update_tasks(data["tasks"]) # update notes self.update_notes(data["note"]) # update delivery address self.update_delivery_address(data["delivery_address"]) self.readonly_mode() def update_notes(self, text): self.notes.delete(1.0, tk.END) self.notes.insert(1.0, text) def update_delivery_address(self, text): self.entry_del_address.delete(0, tk.END) self.entry_del_address.insert(0, text) def readonly_mode(self): self.deactivate_info_entries(CUSTOMER) self.deactivate_info_entries(VENDOR) self.entry_client.configure(state="disabled") self.entry_del_address.configure(state="readonly") self.entry_required.configure(state="disabled") self.entry_ship.configure(state="disabled") for i in self.tasks: if not i[0].get() and not i[0].get().isspace() and i[0].get( ) is not None: i[0].configure(state="normal") i[2].configure(state="readonly") i[1].configure(state="normal") else: if i[1] == 1: i[1].configure(state="disabled") else: i[0].configure(state="normal") i[0].configure(state="disabled") i[2].configure(state="disabled") self.notes.configure(state="disabled") def read_tasks(self): done_tasks = True tasks = "" for task, done, date, check, date_must in self.tasks: if task.get() and not task.get().isspace() and not (task.get() is None): if not check.get(): done_tasks = False if check.get(): check = 1 else: check = 0 tasks = tasks + "" + task.get() + "|" + str( check) + "|" + date.get() + "|" + date_must.get() return [tasks, done_tasks] def read_delivery_entries(self): # self.update_dockets_list() self.btn_submit.configure(command=None) self.set_active() data = [] data.append(self.customer_info[1][0].get()) data.append(self.vendor_info[1][0].get()) tasks, done = self.read_tasks() data.append(done) data.append(time_format(self.entry_client.get())) data.append(time_format(self.entry_required.get())) data.append(time_format(self.entry_ship.get())) data.append(tasks) data.append(self.notes.get(1.0, tk.END)) data.append(self.entry_del_address.get()) self.readonly_mode() submit_delivery(data) def after_action_update(self): self.update_customer_combobox() self.update_vendor_combobox() def insert_dates(self, dates): self.entry_client.delete(0, tk.END) self.entry_ship.delete(0, tk.END) self.entry_required.delete(0, tk.END) self.entry_client.insert(0, dates[0]) self.entry_required.insert(0, dates[1]) self.entry_ship.insert(0, dates[2]) def clear_tasks(self): for i in self.tasks: i[0].delete(0, tk.END) i[1].deselect() i[2].delete(0, tk.END) def clear_entries(self): self.insert_dates([0, 0, 0]) self.entry_client.delete(0, tk.END) self.entry_del_address.delete(0, tk.END) self.entry_required.delete(0, tk.END) self.entry_ship.delete(0, tk.END) self.clear_tasks() self.notes.delete(1.0, tk.END) self.vendor_info[1][0].current(0) self.customer_info[1][0].current(0) def clear_by_partner(self, partner): if partner == CUSTOMER: for i in self.vendor_info[1]: i.delete(0, tk.END) if partner == VENDOR: for i in self.customer_info[1]: i.delete(0, tk.END) def set_active(self): self.activate_info_entries(CUSTOMER) self.activate_info_entries(VENDOR) self.entry_client.configure(state="readonly") self.entry_del_address.configure(state="normal") self.entry_required.configure(state="readonly") self.entry_ship.configure(state="readonly") for i in self.tasks: i[0].configure(state="normal") i[1].configure(state="normal") i[2].configure(state="readonly") self.notes.configure(state="normal") def activate_info_entries(self, partner): if partner == CUSTOMER: data = self.customer_info[1] elif partner == VENDOR: data = self.vendor_info[1] for i in data[1:]: i.configure(state="normal") data[0].configure(state="readonly") def deactivate_info_entries(self, partner, include=True): """ CHANGE SIMILAR SSTATEMENTS ON THIS IF .... CUSOTMER: DATA = SELF.CUSTOMER FOR I IN DATA: .... """ if include: if partner == CUSTOMER: data = self.customer_info[1] elif partner == VENDOR: data = self.vendor_info[1] for i in data[1:]: i.configure(state="disabled") data[0].configure(state="disabled") def update_tasks(self, text): if text is None: return None text = text.split("\n") #text.remove("") self.clear_tasks() for num, obj in enumerate(text): obj = obj.split("|") self.tasks[num][0].delete(0, tk.END) self.tasks[num][0].insert(0, obj[0]) self.tasks[num][3].set(int(obj[1])) self.tasks[num][2].delete(0, tk.END) self.tasks[num][2].insert(0, obj[2]) self.tasks[num][4].delete(0, tk.END) self.tasks[num][4].insert(0, obj[3]) def read_partner(self, partner): self.btn_submit.configure(command=None) data = None if partner == CUSTOMER: data = self.customer_info[1] elif partner == VENDOR: data = self.vendor_info[1] submit_data = [] for i in data[1:]: submit_data.append(str(i.get())) submit_partner(submit_data, partner) self.clear_entries() self.update_customer_combobox() self.update_vendor_combobox() def new_partner(self, partner): self.set_active() self.clear_entries() self.readonly_mode() self.activate_info_entries(VENDOR) self.activate_info_entries(CUSTOMER) self.clear_by_partner(VENDOR) self.clear_by_partner(CUSTOMER) if partner == VENDOR: self.deactivate_info_entries(CUSTOMER) elif partner == CUSTOMER: self.deactivate_info_entries(VENDOR) self.btn_submit.configure(command=lambda: self.read_partner(partner))
class StudentApp(tk.Tk): def __init__(self): super().__init__() self.title("Student Management System") self.geometry("800x750") self.resizable(0, 0) self.Title = tk.Label(self, text="سیستم مدیریت دانشجویی", font=("Helvetica", 16), fg="green") self.FName = tk.Label(self, text="نام:", font=("Helvetica", 10), bg="white", fg="black") self.LName = tk.Label(self, text="نام خانوادگی:", font=("Helvetica", 10), bg="white", fg="black") self.UnitId = tk.Label(self, text="کد ملی:", font=("Helvetica", 10), bg="white", fg="black") self.ContactNo = tk.Label(self, text="شماره تماس:", font=("Helvetica", 10), bg="white", fg="black") self.City = tk.Label(self, text="شهر:", font=("Helvetica", 10), bg="white", fg="black") self.State = tk.Label(self, text="استان:", font=("Helvetica", 10), bg="white", fg="black") self.DOB = tk.Label(self, text="تاریخ تولد:", font=("Helvetica", 10), bg="white", fg="black") self.Select = tk.Label( self, text= "لطفا یکی از رکورد های زیر را برای آپدیت یا پاک کردن انتخاب کنید", font=("Helvetica", 10), bg="white", fg="black") self.Search = tk.Label(self, text="لطفا شماره ردیف را وارد کنید:", font=("Helvetica", 10), bg="white", fg="black") # Create Entry for Input Data self.entFName = tk.Entry(self) self.entLName = tk.Entry(self) self.entUnit = tk.Entry(self) self.entContact = tk.Entry(self) self.entCity = tk.Entry(self) self.entState = tk.Entry(self) self.calDOB = DateEntry(self, width=12, background='darkblue', foreground='white', borderwidth=2, year=1950, locale='en_US', date_pattern='y-mm-dd') # self.entDOB = tk.Entry(self) self.entSearch = tk.Entry(self) # Create Button for Submit or ... Data's self.btn_register = tk.Button(self, text="ثبت", font=("Helvetica", 11), bg="green", fg="black", command=self.register_student) self.btn_update = tk.Button(self, text="آپدیت", font=("Helvetica", 11), bg="lightgreen", fg="black", command=self.update_student_data) self.btn_delete = tk.Button(self, text="پاک کردن", font=("Helvetica", 11), bg="yellow", fg="black", command=self.delete_student_data) self.btn_clear = tk.Button(self, text="دیلیت رکورد", font=("Helvetica", 11), bg="red", fg="black", command=self.clear_form) self.btn_show_all = tk.Button(self, text="نمایش همه", font=("Helvetica", 11), bg="blue", fg="black", command=self.load_student_data) self.btn_search = tk.Button(self, text="جست و جو", font=("Helvetica", 11), bg="lightblue", fg="black", command=self.show_search_record) self.btn_exit = tk.Button(self, text="خروج", font=("Helvetica", 16), bg="brown", fg="white", command=self.exit) # Title of Table Show Student's Data columns = ("#1", "#2", "#3", "#4", "#5", "#6", "#7", "#8") self.tvStudent = ttk.Treeview(self, show="headings", height="5", columns=columns) self.tvStudent.heading('#1', text='شماره ردیف', anchor='center') self.tvStudent.column('#1', width=80, anchor='center', stretch=False) self.tvStudent.heading('#2', text='نام', anchor='center') self.tvStudent.column('#2', width=10, anchor='center', stretch=True) self.tvStudent.heading('#3', text='نام خانوادگی', anchor='center') self.tvStudent.column('#3', width=10, anchor='center', stretch=True) self.tvStudent.heading('#4', text='کد ملی', anchor='center') self.tvStudent.column('#4', width=10, anchor='center', stretch=True) self.tvStudent.heading('#5', text='شهر', anchor='center') self.tvStudent.column('#5', width=10, anchor='center', stretch=True) self.tvStudent.heading('#6', text='استان', anchor='center') self.tvStudent.column('#6', width=10, anchor='center', stretch=True) self.tvStudent.heading('#7', text='شماره تماس', anchor='center') self.tvStudent.column('#7', width=10, anchor='center', stretch=True) self.tvStudent.heading('#8', text='تاریخ تولد', anchor='center') self.tvStudent.column('#8', width=10, anchor='center', stretch=True) # Scroll bars are set up below considering placement position(x&y) ,height and width of treeview widget vsb = ttk.Scrollbar(self, orient=tk.VERTICAL, command=self.tvStudent.yview) vsb.place(x=40 + 640 + 1, y=310, height=180 + 20) self.tvStudent.configure(yscroll=vsb.set) hsb = ttk.Scrollbar(self, orient=tk.HORIZONTAL, command=self.tvStudent.xview) hsb.place(x=40, y=310 + 200 + 1, width=620 + 20) self.tvStudent.configure(xscroll=hsb.set) self.tvStudent.bind("<<TreeviewSelect>>", self.show_selected_record) # Create A plase of label's self.Title.place(x=250, y=10, height=27, width=300) self.FName.place(x=206, y=40, height=23, width=100) self.LName.place(x=207, y=70, height=23, width=100) self.UnitId.place(x=203, y=100, height=23, width=104) self.ContactNo.place(x=203, y=130, height=23, width=104) self.City.place(x=242, y=160, height=23, width=65) self.State.place(x=236, y=190, height=23, width=71) self.DOB.place(x=180, y=220, height=23, width=128) self.Select.place(x=197, y=280, height=23, width=400) self.Search.place(x=170, y=560, height=23, width=134) # Create A plase of Entry's self.entFName.place(x=330, y=40, height=21, width=186) self.entLName.place(x=330, y=70, height=21, width=186) self.entUnit.place(x=330, y=100, height=21, width=186) self.entContact.place(x=330, y=130, height=21, width=186) self.entCity.place(x=330, y=160, height=21, width=186) self.entState.place(x=330, y=190, height=21, width=186) self.calDOB.place(x=330, y=220, height=21, width=186) # Create A plase of Buttons's self.entSearch.place(x=310, y=560, height=21, width=186) self.btn_register.place(x=200, y=245, height=25, width=76) self.btn_update.place(x=280, y=245, height=25, width=76) self.btn_delete.place(x=360, y=245, height=25, width=76) self.btn_clear.place(x=440, y=245, height=25, width=76) self.btn_show_all.place(x=520, y=245, height=25, width=76) self.btn_search.place(x=505, y=558, height=26, width=60) self.btn_exit.place(x=720, y=610, height=31, width=60) self.tvStudent.place(x=80, y=310, height=200, width=600) # Create Table & load Student Data self.create_table() self.load_student_data() # clear Form's def clear_form(self): self.entFName.delete(0, tk.END) self.entLName.delete(0, tk.END) self.entUnit.delete(0, tk.END) self.entContact.delete(0, tk.END) self.entCity.delete(0, tk.END) self.entState.delete(0, tk.END) self.calDOB.delete(0, tk.END) # Exit from Task def exit(self): MsgBox = mb.askquestion('خروج از برنامه', 'آیا مطمئن هستید که میخواهید خارج شوید', icon='warning') if MsgBox == 'yes': self.destroy() # Delete Student Data From DB def delete_student_data(self): MsgBox = mb.askquestion('پاک کردن رکورد', 'آیا از پاک کردن رکورد مطمئن هستید؟', icon='warning') if MsgBox == 'yes': if db_connection.is_connected() == False: db_connection.connect() db_cursor.execute("use Student") # Interact with Student Database # deleteing selected student record Delete = "delete from student_master where RollNo='%s'" % (roll_no) db_cursor.execute(Delete) db_connection.commit() mb.showinfo("Information", "رکورد دانشجوی مورد نظر پاک شد") self.load_student_data() self.entFName.delete(0, tk.END) self.entLName.delete(0, tk.END) self.entUnit.delete(0, tk.END) self.entContact.delete(0, tk.END) self.entCity.delete(0, tk.END) self.entState.delete(0, tk.END) self.calDOB.delete(0, tk.END) # Create Table in DB def create_table(self): if db_connection.is_connected() == False: db_connection.connect() # executing cursor with execute method and pass SQL query db_cursor.execute("CREATE DATABASE IF NOT EXISTS Student" ) # Create a Database Named Student db_cursor.execute("use Student") # Interact with Student Database # creating required tables db_cursor.execute( "create table if not exists Student_master(Id INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,rollno INT(15),fname VARCHAR(30),lname VARCHAR(30),meli VARCHAR(11), city VARCHAR(20),state VARCHAR(30),mobileno VARCHAR(11),dob date)AUTO_INCREMENT=1" ) db_connection.commit() # Add Student To Data Base def register_student(self): if db_connection.is_connected() == False: db_connection.connect() fname = self.entFName.get() # Retrieving entered first name lname = self.entLName.get() # Retrieving entered last name unit_id = self.entUnit.get() # # Retrieving entered code number contact_no = self.entContact.get() # Retrieving entered contact number city = self.entCity.get() # Retrieving entered city name state = self.entState.get() # Retrieving entered state name dob = self.calDOB.get() # Retrieving choosen date # validating Entry Widgets if fname == "": mb.showinfo('Information', "لطفا نام را وارد کنید") self.entFName.focus_set() return if lname == "": mb.showinfo('Information', "لطفا نام خانوادگی را وارد کنید") self.entLName.focus_set() return if unit_id == "": mb.showinfo('Information', "لطفا کد ملی را وارد کنید") self.entUnit.focus_set() return if contact_no == "": mb.showinfo('Information', "لطفا شماره تماس را وارد کنید") self.entContact.focus_set() return if city == "": mb.showinfo('Information', "لطفا نام شهر را وارد کنید") self.entCity.focus_set() return if state == "": mb.showinfo('Information', "لطفا نام استان را وارد کنید") self.entState.focus_set() return if dob == "": mb.showinfo('Information', "لطفا تاریخ تولد را انتخاب کنید") self.calDOB.focus_set() return # Inserting record into student_master table of student database try: rollno = int(self.fetch_max_roll_no()) print("New Student Id: " + str(rollno)) query2 = "INSERT INTO student_master (rollno, fname,lname,city,state,meli,mobileno,dob) VALUES (%s, %s,%s,%s, %s,%s, %s, %s)" # implement query Sentence db_cursor.execute( query2, (rollno, fname, lname, city, state, unit_id, contact_no, dob)) mb.showinfo('Information', "دانشجو با موفقیت ثبت شد") # Submit to database for execution db_connection.commit() self.load_student_data() except mysql.connector.Error as err: print(err) # Rollback in case there is any error db_connection.rollback() mb.showinfo('Information', "داده های وارد شده با خطا مواجه شد!!!") finally: db_connection.close() def fetch_max_roll_no(self): if db_connection.is_connected() == False: db_connection.connect() db_cursor.execute("use Student") # Interact with Student Database rollno = 0 query1 = "SELECT rollno FROM student_master order by id DESC LIMIT 1" # implement query Sentence db_cursor.execute(query1) # Retrieving maximum student id no print("No of Record Fetched:" + str(db_cursor.rowcount)) if db_cursor.rowcount == 0: rollno = 1 else: rows = db_cursor.fetchall() for row in rows: rollno = row[0] rollno = rollno + 1 print("Max Student Id: " + str(rollno)) return rollno # show Record From DB If Search that def show_search_record(self): if db_connection.is_connected() == False: db_connection.connect() s_roll_no = self.entSearch.get() # Retrieving entered first name print(s_roll_no) if s_roll_no == "": mb.showinfo('Information', "لطفا مقداری را وارد نمایید!!!") self.entSearch.focus_set() return self.tvStudent.delete( *self.tvStudent.get_children()) # clears the treeview tvStudent # Inserting record into student_master table of student database db_cursor.execute("use Student") # Interact with Bank Database sql = "SELECT rollno,fname,lname,city,state,mobileno,date_format(dob,'%d-%m-%Y') FROM student_master where rollno='" + s_roll_no + "'" db_cursor.execute(sql) total = db_cursor.rowcount # if total ==0: # mb.showinfo("Info", "Nothing To Display,Please add data") # return print("Total Data Entries:" + str(total)) rows = db_cursor.fetchall() RollNo = "" First_Name = "" Last_Name = "" Unit_Meli = "" City = "" State = "" Phone_Number = "" DOB = "" for row in rows: RollNo = row[0] First_Name = row[1] Last_Name = row[2] City = row[3] State = row[4] Unit_Meli = row[5] Phone_Number = row[6] DOB = row[7] print(Phone_Number) self.tvStudent.insert("", 'end', text=RollNo, values=(RollNo, First_Name, Last_Name, City, State, Unit_Meli, Phone_Number, DOB)) # show Selection Record From DataBase def show_selected_record(self, event): self.clear_form() for selection in self.tvStudent.selection(): item = self.tvStudent.item(selection) global roll_no roll_no, first_name, last_name, city, state, unit_id, contact_no, dob = item[ "values"][0:8] self.entFName.insert(0, first_name) self.entLName.insert(0, last_name) self.entCity.insert(0, city) self.entState.insert(0, state) self.entUnit.insert(0, unit_id) self.entContact.insert(0, contact_no) self.calDOB.insert(0, dob) return roll_no # Update Recourd of Student in DataBase def update_student_data(self): if db_connection.is_connected() == False: db_connection.connect() print("Updating") db_cursor.execute("use Student") # Interact with Student Database First_Name = self.entFName.get() Last_Name = self.entLName.get() Unit_Meli = self.entUnit.get() Phone_Number = self.entContact.get() City = self.entCity.get() State = self.entState.get() DOB = self.calDOB.get() print(roll_no) Update = "Update student_master set fname='%s', lname='%s', meli='%s' , mobileno='%s', city='%s', state='%s', dob='%s' where rollno='%s'" % ( First_Name, Last_Name, Unit_Meli, Phone_Number, City, State, DOB, roll_no) db_cursor.execute(Update) db_connection.commit() mb.showinfo("Info", "رکورد دانشجوی انتخاب شده با موفقیت به روز شد") # show all self.load_student_data() # load Student Data From Database def load_student_data(self): if db_connection.is_connected() == False: db_connection.connect() self.calDOB.delete(0, tk.END) # clears the date entry widget self.tvStudent.delete( *self.tvStudent.get_children()) # clears the treeview tvStudent # Inserting record into student_master table of student database db_cursor.execute("use Student") # Interact with Bank Database sql = "SELECT rollno,fname,lname,city,state,meli,mobileno,date_format(dob,'%d-%m-%Y') FROM student_master" db_cursor.execute(sql) total = db_cursor.rowcount # if total ==0: # mb.showinfo("Info", "Nothing To Display,Please add data") # return print("Total Data Entries:" + str(total)) rows = db_cursor.fetchall() RollNo = "" First_Name = "" Last_Name = "" City = "" State = "" Unit_Meli = "" Phone_Number = "" DOB = "" for row in rows: RollNo = row[0] First_Name = row[1] Last_Name = row[2] City = row[3] State = row[4] Unit_Meli = row = [5] Phone_Number = row[6] DOB = row[7] self.tvStudent.insert("", 'end', text=RollNo, values=(RollNo, First_Name, Last_Name, City, State, Phone_Number, DOB))
class Funcionario_view(tk.Frame): def __init__(self, master=None): super().__init__(master) self.master = master self.pack() self.criar_widget_funcionario() self.funcionario = Funcionario("", 0, 0, "", "", "", 0) def criar_widget_funcionario(self): # Título self.container_titulo = tk.Frame(self.master) self.container_titulo["pady"] = 10 self.container_titulo["padx"] = 20 self.container_titulo.pack() self.titulo_dados = tk.Label(self.container_titulo, text="CADASTRAR NOVO FUNCIONÁRIO") self.titulo_dados.pack() # Campo id self.container_id = self.criar_container_padrao() self.id_label = tk.Label(self.container_id, text="Id") self.id_label["width"] = 20 self.id_label["anchor"] = tk.NW self.id_label.pack(side=tk.LEFT) self.id = tk.Entry(self.container_id) self.id["width"] = 10 self.id.pack(side=tk.LEFT) self.botao_buscar = tk.Button(self.container_id) self.botao_buscar["text"] = "Buscar" self.botao_buscar["command"] = self.buscar_funcionario self.botao_buscar.pack(side=tk.LEFT) # Campo nome self.container_nome = self.criar_container_padrao() self.nome_label = tk.Label(self.container_nome, text="Nome") self.nome_label["width"] = 20 self.nome_label["anchor"] = tk.NW self.nome_label.pack(side=tk.LEFT) self.nome = tk.Entry(self.container_nome) self.nome["width"] = 20 self.nome.pack(side=tk.LEFT) # Campo nascimento self.container_nascimento = self.criar_container_padrao() self.nascimento_label = tk.Label(self.container_nascimento, text="Data de nascimento") self.nascimento_label["width"] = 20 self.nascimento_label["anchor"] = tk.NW self.nascimento_label.pack(side=tk.LEFT) self.nascimento = DateEntry(self.container_nascimento, width=18, background='darkblue', foreground='white', borderwidth=2) self.nascimento.pack(side=tk.LEFT) # Campo sexo self.container_sexo = self.criar_container_padrao() self.sexo_label = tk.Label(self.container_sexo, text="Sexo") self.sexo_label["width"] = 20 self.sexo_label["anchor"] = tk.NW self.sexo_label.pack(side=tk.LEFT) self.sexo = tk.StringVar(self.container_sexo) self.sexo.set("") # default value self.sexo_combo = tk.OptionMenu(self.container_sexo, self.sexo, "Masculino", "Feminino", "") self.sexo_combo["width"] = 15 self.sexo_combo.pack(side=tk.LEFT) # Campo cargo self.container_cargo = self.criar_container_padrao() self.cargo_label = tk.Label(self.container_cargo, text="Cargo") self.cargo_label["width"] = 20 self.cargo_label["anchor"] = tk.NW self.cargo_label.pack(side=tk.LEFT) self.cargo = tk.Entry(self.container_cargo) self.cargo["width"] = 20 self.cargo.pack(side=tk.LEFT) # Campo qtde dependentes self.container_qtde_dependetes = self.criar_container_padrao() self.qtde_dependetes_label = tk.Label(self.container_qtde_dependetes, text="Dependentes") self.qtde_dependetes_label["width"] = 20 self.qtde_dependetes_label["anchor"] = tk.NW self.qtde_dependetes_label.pack(side=tk.LEFT) self.qtde_dependetes = tk.StringVar(self.container_qtde_dependetes) self.qtde_dependetes.set("0") # default value self.qtde_dependetes_combo = tk.OptionMenu(self.container_qtde_dependetes, self.qtde_dependetes, "0", "1", "2", "3", "4", "5") self.qtde_dependetes_combo["width"] = 15 self.qtde_dependetes_combo.pack(side=tk.LEFT) # Botões self.container_botoes = self.criar_container_padrao() self.botao_criar = tk.Button(self.container_botoes) self.botao_criar["text"] = "Criar" self.botao_criar["command"] = self.add_funcionario self.botao_criar["bg"] = "blue" self.botao_criar["fg"] = "white" self.botao_criar.pack(side=tk.LEFT) self.botao_atualizar = tk.Button(self.container_botoes) self.botao_atualizar["text"] = "Atualizar" self.botao_atualizar["command"] = self.atualizar_funcionario self.botao_atualizar["bg"] = "green" self.botao_atualizar["fg"] = "white" self.botao_atualizar["state"] = "disabled" self.botao_atualizar.pack(side=tk.LEFT) self.botao_excluir = tk.Button(self.container_botoes) self.botao_excluir["text"] = "Excluir" self.botao_excluir["command"] = self.excluir_funcionario self.botao_excluir["bg"] = "red" self.botao_excluir["fg"] = "white" self.botao_excluir["state"] = "disabled" self.botao_excluir.pack(side=tk.LEFT) self.botao_limpar = tk.Button(self.container_botoes) self.botao_limpar["text"] = "Limpar" self.botao_limpar["command"] = self.limpar_tela self.botao_limpar.pack() # Mensagem self.container_mensagem = self.criar_container_padrao() self.mensagem = tk.Label(self.container_mensagem, text="") self.mensagem.pack() def criar_container_padrao(self): container = tk.Frame(self.master) container["padx"] = 20 container["pady"] = 5 container.pack() return container def add_funcionario(self): self.funcionario.nome = self.nome.get() self.funcionario.cargo = self.cargo.get() self.funcionario.id_setor = 0 self.funcionario.qtd_dependentes = self.qtde_dependetes.get() self.funcionario.sexo = self.sexo.get() self.funcionario.data_nascimento = self.nascimento.get() self.funcionario.salario = 950 status, id_gerado, mensagem = self.funcionario.insert_funcionario() if status: self.id.insert(0, id_gerado) self.botao_criar.config(state="disabled") self.botao_excluir.config(state="normal") self.botao_atualizar.config(state="normal") self.mensagem["text"] = mensagem def limpar_tela(self): self.id.delete(0, tk.END) self.nome.delete(0, tk.END) self.nascimento.delete(0, tk.END) self.cargo.delete(0, tk.END) self.sexo.set("") self.qtde_dependetes.set("0") self.mensagem["text"] = "" self.funcionario = Funcionario("", 0, 0, "", "", "", 0) self.botao_criar.config(state="normal") self.botao_excluir.config(state="disabled") self.botao_atualizar.config(state="disabled") def buscar_funcionario(self): status, mensagem = self.funcionario.select_funcionario(self.id.get()) if status: self.nome.insert(0, self.funcionario.nome) self.nascimento.set_date(self.funcionario.data_nascimento) self.cargo.insert(0, self.funcionario.cargo) self.sexo.set(self.funcionario.sexo) self.qtde_dependetes.set(self.funcionario.qtd_dependentes) self.botao_criar.config(state="disabled") self.botao_excluir.config(state="normal") self.botao_atualizar.config(state="normal") else: self.limpar_tela() self.mensagem["text"] = mensagem def atualizar_funcionario(self): self.funcionario.nome = self.nome.get() self.funcionario.cargo = self.cargo.get() self.funcionario.id_setor = 0 self.funcionario.qtd_dependentes = self.qtde_dependetes.get() self.funcionario.sexo = self.sexo.get() self.funcionario.data_nascimento = self.nascimento.get() self.funcionario.salario = 950 status, mensagem = self.funcionario.update_funcionario() if status: self.limpar_tela() self.mensagem["text"] = mensagem def excluir_funcionario(self): self.funcionario.id_funcionario = self.id.get() status, mensagem = self.funcionario.delete_funcionario() if status: self.limpar_tela() self.mensagem["text"] = mensagem
From_text = StringVar() e1 = Entry(window, textvariable=From_text) e1.grid(row=1, column=1) to_text = StringVar() e2 = Entry(window, textvariable=to_text) e2.grid(row=2, column=1) From_dt_text = StringVar() e3 = DateEntry(window, width=15, date_pattern='dd-mm-yyyy', background='darkblue', foreground='white') e3.grid(row=1, column=3) e3.delete(0, END) From_hrs_text = StringVar() number_hrs = Combobox(window, width=4, textvariable=From_hrs_text) number_hrs['values'] = (f"{0:02d}",f"{1:02d}",f"{2:02d}",f"{3:02d}",f"{4:02d}",f"{5:02d}",f"{6:02d}",f"{7:02d}",f"{8:02d}",f"{9:02d}",\ 10,11,12,13,14,15,16,17,18,19,20,21,22,23) number_hrs.grid(row=1, column=4) From_min_text = StringVar() number_min = Combobox(window, width=4, textvariable=From_min_text) number_min['values'] = (f"{0:02d}",f"{1:02d}",f"{2:02d}",f"{3:02d}",f"{4:02d}",f"{5:02d}",f"{6:02d}",f"{7:02d}",f"{8:02d}",f"{9:02d}",\ 10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59) number_min.grid(row=1, column=5) e4 = AutocompleteEntry(ctry_list2.keys(), window) e4.grid(row=3, column=1)
class CrudGui: is_editable = False def __init__(self, window): self.window = window self.window.title("CRUD SQLITE") self.window.resizable(0, 0) self.window.geometry('807x680') # Frame frame = LabelFrame(self.window, text='Estudiante') frame.grid(row=0, column=0, pady=10, columnspan=4, padx=30) # Document number Input Label(frame, text='Número de Documento: ', pady=15).grid(row=1, column=0, sticky=W) self.document_number = Entry(frame, width=31) self.document_number.focus() self.document_number.grid(row=1, column=1, ipady=3) # Name Input Label(frame, text='Nombre: ', pady=15).grid(row=2, column=0, sticky=W) self.name = Entry(frame, widt=31) self.name.focus() self.name.grid(row=2, column=1, ipady=3) # Date Input Label(frame, text='Fecha: ', pady=15).grid(row=3, column=0, sticky=W) self.date = DateEntry(frame, width=30, date_pattern='yyyy-mm-dd') self.date.grid(row=3, column=1, ipady=3) # Gender self.combo_value = StringVar() Label(frame, text='Género: ', pady=15).grid(row=4, column=0, sticky=W) self.gender = ttk.Combobox(frame, textvariable=self.combo_value, state="readonly", width=30) self.gender['values'] = ['Seleccione género', 'MASCULINO', 'FEMENINO', 'OTRO'] self.gender.current(0) self.gender.grid(row=4, column=1, ipady=3) # Button Save Student self.button_text = StringVar() self.button_text.set('Crear estudiante') Button(frame, bg='#1976D2', fg='#FFFFFF', height=2, relief=RAISED, textvariable=self.button_text, command=self.save).grid( row=5, columnspan=4, sticky=W + E, pady=25) # Table self.table = ttk.Treeview(height=10, columns=('#0', '#1', '#2',)) scrollbar = ttk.Scrollbar(orient=VERTICAL, command=self.table.yview) self.table.configure(yscrollcommand=scrollbar) self.table.grid(row=5, column=0, columnspan=2) self.table.heading('#0', text='N° Documento', anchor=CENTER) self.table.heading('#1', text='Nombre', anchor=CENTER) self.table.heading('#2', text='Fecha', anchor=CENTER) self.table.heading('#3', text='Género', anchor=CENTER) # Buttons Button(text='Borrar', command=self.delete, width=30, bg='#F44336', fg='#FFFFFF', height=2, relief=RAISED, ).grid(row=6, column=0, sticky=N, pady=15, padx=10) Button(text='Editar', command=self.edit, width=30, bg='#009688', fg='#FFFFFF', height=2, relief=RAISED, ).grid(row=6, column=1, sticky=N, pady=15, padx=10) Label(text='Elaborado por: Cristhian Forero', pady=5).grid(row=7, column=0, sticky=W) self.get_data() def validation_fields_rules(self): return len(self.document_number.get().strip()) != 0 and len(self.name.get().strip()) != 0 and len( self.date.get().strip()) != 0 and self.gender.get() != 'Seleccione género' def save(self): if self.validation_fields_rules(): student = ( self.document_number.get(), self.name.get(), datetime.strptime(str(self.date.get_date()), '%Y-%m-%d').date(), GenderEnum[self.combo_value.get()].value ) if not match(r'^\d{1,14}$', self.document_number.get()): messagebox.showwarning('ERROR', 'El campo "Número de documento" debe estar compuesto solo por números con un máximo de 14 dígitos') return if self.is_editable: update_student(student) messagebox.showinfo('OK', 'El estudiante ha sido actualizado :)') self.clear_fields() else: if get_student(self.document_number.get()).fetchone(): messagebox.showwarning('¡ALERTA!', 'Ya existe un estudiante registrado con ese número de documento') return create_student(student) messagebox.showinfo('OK', 'El estudiante ha sido creado :)') self.clear_fields() self.get_data() self.is_editable = False else: messagebox.showwarning('¡ALERTA!', 'Todos los campos son requeridos') def get_data(self): rows = self.table.get_children() for item in rows: self.table.delete(item) students = get_students() for student in students: self.table.insert('', 0, text=student[0], values=(student[1], student[2], GenderEnum(student[3]).name) ) def delete(self): if self.get_selected_data(): document_number = self.get_selected_data().get('document_number') if messagebox.askokcancel('', '¿Desea borrar el registro?'): delete_student(document_number) self.clear_fields() self.get_data() def edit(self): if self.get_selected_data(): self.clear_fields() self.button_text.set('Actualizar estudiante') self.document_number.insert(0, self.get_selected_data().get('document_number')) self.name.insert(0, self.get_selected_data().get('name')) self.date.set_date(self.get_selected_data().get('date')) self.gender.set(self.get_selected_data().get('gender')) self.is_editable = True def get_selected_data(self): document_number = self.table.item(self.table.selection()).get('text') if document_number == '': messagebox.showerror('ERROR', 'Por favor seleccione un registro.') return values = self.table.item(self.table.selection()).get('values') return { 'document_number': document_number, 'name': values[0], 'date': values[1], 'gender': values[2] } def clear_fields(self): self.document_number.focus() self.button_text.set('Crear estudiante') self.document_number.delete(0, END) self.name.delete(0, END) self.date.delete(0, END) self.gender.set('Seleccione género')
class welcome: def __init__(self, user, window): self.window = window self.user_id = user self.user = user self.window.title('User Form') self.item_index = [] self.my_connection = mysql.connector.connect(host='localhost', user='******', password='', database='register') self.my_cursor = self.my_connection.cursor() self.search_by = StringVar() self.search_txt = StringVar() self.list2 = [{ 'name': 'Economy', 'price': 3000 }, { 'name': 'Premium Economy', 'price': 4000 }, { 'name': 'Business Class', 'price': 5000 }, { 'name': 'First Class', 'price': 6000 }] # Get the names of the all flights name self.names = list(map(lambda x: x.get('name'), self.list2)) self.window.geometry('1100x700+90+40') self.window.resizable(0, 0) self.bg = ImageTk.PhotoImage( file= 'C:\\Users\\Dell\\PycharmProjects\\untitled3\\project\\Webp.net-resizeimage (4).jpg' ) self.bg_Image = Label(self.window, image=self.bg).place(x=0, y=0, relwidth=1, relheight=1) self.frame1 = Frame(self.window, bg='white') self.frame1.place(x=100, y=30, height=700, width=900) self.frame2 = Frame(self.frame1, bg='lightgrey') self.frame2.place(x=0, y=60, height=55, width=900) self.label_name = Label(self.frame1, text="Book Flights", font=('Impact', 20, 'bold'), fg="#d77337", bg='white') self.label_name.place(x=300, y=15) self.btn_return = Button(self.frame1, text="Return", relief=RAISED, bg='lightgrey', font=('arial', 14, 'bold'), fg='black', bd=0) self.btn_return.place(x=90, y=70) self.btn_oneway = Button(self.frame1, text="One way", relief=RAISED, bg='lightgrey', font=('arial', 14, 'bold'), fg='black', bd=0, command=self.open) self.btn_oneway.place(x=300, y=70) self.btn_exit = Button(self.frame1, text="Exit", relief=RAISED, bg='lightgrey', font=('arial', 14, 'bold'), fg='red', bd=0, command=exit) self.btn_exit.place(x=510, y=70, width=100) self.label_where = Label(self.frame1, text="Where From:", font=('Goudy old style', 12, 'bold'), fg='grey', bg='white') self.label_where.place(x=60, y=130) self.ent_where = Entry(self.frame1, font=('times new roman', 9), bg='lightgray') self.ent_where.place(x=170, y=130, width=200, height=30) self.label_to = Label(self.frame1, text="Where To:", font=('Goudy old style', 12, 'bold'), fg='grey', bg='white') self.label_to.place(x=390, y=130) self.ent_to = Entry(self.frame1, font=('times new roman', 9), bg='lightgray') self.ent_to.place(x=490, y=130, width=200, height=30) self.label_dpt = Label(self.frame1, text="Departure Date:", font=('Goudy old style', 12, 'bold'), fg='grey', bg='white') self.label_dpt.place(x=50, y=180) self.ent_dpt = DateEntry(self.frame1, width=12, background='darkblue', foreground='white', state='readonly', borderwidth=2) self.ent_dpt.place(x=170, y=180, width=200) ttk.Button(self.frame1, text="ok") # self.ent_dpt = Entry(self.frame1, font=('times new roman', 9), bg='lightgray') # self.ent_dpt.place(x=170, y=200, width=200, height=30) self.label_date = Label(self.frame1, text="Return date:", font=('Goudy old style', 12, 'bold'), fg='grey', bg='white') self.label_date.place(x=390, y=180) self.ent_date = DateEntry(self.frame1, width=12, background='darkblue', foreground='white', state='readonly', borderwidth=2) self.ent_date.place(x=490, y=180, width=200) ttk.Button(self.frame1, text="ok") self.combo = Label(self.frame1, text='Age Selection', font=('Goudy old style', 12, 'bold'), bg='white', fg='gray').place(x=50, y=230) self.txt_combo = ttk.Combobox(self.frame1, font=('times new roman', 9), state='readonly', justify=CENTER) self.txt_combo['values'] = ('Adult', 'Children', 'Infant', 'Old age') self.txt_combo.place(x=170, y=230, width=200) self.txt_combo.current(0) self.label_count = Label(self.frame1, text="Count:", font=('Goudy old style', 12, 'bold'), fg='grey', bg='white') self.label_count.place(x=390, y=230) self.ent_count = Entry(self.frame1, font=('times new roman', 9), bg='lightgray') self.ent_count.place(x=490, y=230, width=200, height=30) self.classcombo = Label(self.frame1, text="Class Selection:", font=('Goudy old style', 12, 'bold'), fg='grey', bg='white').place(x=50, y=280) self.txt_classcombo = ttk.Combobox(self.frame1, font=('times new roman', 9), state='readonly', justify=CENTER, values=self.names) self.txt_classcombo['values'] = ('Economy', 'Premium Economy', 'Business Class', 'First Class') self.txt_classcombo.bind('<<ComboboxSelected>>', self.fetch_data) self.txt_classcombo.place(x=170, y=280) self.txt_classcombo.current(0) self.label_price = Label(self.frame1, text="Price:", font=('Goudy old style', 12, 'bold'), fg='grey', bg='white') self.label_price.place(x=390, y=280) self.flight = Label(self.frame1, text="Flight Selection:", font=('Goudy old style', 12, 'bold'), fg='grey', bg='white').place(x=50, y=320) self.txt_flight = ttk.Combobox(self.frame1, textvariable=self.search_by, font=('times new roman', 9), state='readonly', justify=CENTER) self.txt_flight['values'] = ('Buddha Air', 'Yeti Airlines', 'Surya Airline', 'Nepal Airlines', 'Tara Airlines') self.txt_flight.place(x=170, y=320) self.txt_flight.current(0) self.ent_price = Entry(self.frame1, textvariable=self.search_txt, font=('times new roman', 9), bg='lightgray') self.ent_price.place(x=490, y=280, width=200, height=30) self.ent_price.insert(0, '3000') self.txt_search = Entry(self.frame1, font=('times new roman', 9)) self.txt_search.place(x=400, y=320) self.combo_search = ttk.Combobox(self.frame1, font=('times new roman', 9), state='readonly', justify=CENTER) self.combo_search['values'] = ('flight_name', 'destination', 'source') self.combo_search.place(x=550, y=320) self.combo_search.current(0) self.btn_add = Button(self.frame1, text="Search", command=self.Search_Items) self.btn_add.place(x=710, y=320) self.btn_book = Button(self.frame1, text="Book Flight", relief=RAISED, bg='green', font=('arial', 14, 'bold'), fg='white', command=self.book_flight) self.btn_book.place(x=50, y=590) self.btn_book = Button(self.frame1, text="Cancel Flight", relief=RAISED, bg='red', font=('arial', 14, 'bold'), fg='white', command=self.delete_item) self.btn_book.place(x=220, y=590) self.book_tree = ttk.Treeview( self.frame1, columns=('ID', 'Where from', 'Where to', 'Departure Time', 'Return Date', 'Age Selection', 'Count', 'User_id', 'Price', 'Flight_Name')) self.book_tree.place(x=50, y=360) self.btn_book = Button(self.frame1, text="Bill", relief=RAISED, bg='red', font=('arial', 14, 'bold'), fg='white', command=self.generate_bill) self.btn_book.place(x=400, y=590) self.btn_update = Button(self.frame1, text="Update", relief=RAISED, bg='red', font=('arial', 14, 'bold'), fg='white', command=self.update) self.btn_update.place(x=600, y=590) # self.book_entry = Entry(self.frame1) # self.book_entry.grid(row=60, column=300) self.book_tree['show'] = 'headings' self.book_tree.column('ID', width=80) self.book_tree.column('Where from', width=80) self.book_tree.column('Where to', width=80) self.book_tree.column('Departure Time', width=80) self.book_tree.column('Return Date', width=80) self.book_tree.column('Age Selection', width=80) self.book_tree.column('Count', width=80) self.book_tree.column('User_id', width=80) self.book_tree.column('Price', width=80) self.book_tree.column('Flight_Name', width=80) self.book_tree.heading('ID', text="ID") self.book_tree.heading('Where from', text="Where from") self.book_tree.heading('Where to', text="Where to") self.book_tree.heading('Departure Time', text="Departure Time") self.book_tree.heading('Return Date', text="Return Date") self.book_tree.heading('Age Selection', text="Age Selection") self.book_tree.heading('Count', text="Count") self.book_tree.heading('User_id', text="User Id") self.book_tree.heading('Price', text="Price") self.book_tree.heading('Flight_Name', text="Flight_Name") self.show_in_treeview() def clear(self): self.ent_where.delete(0, END) self.ent_to.delete(0, END) self.ent_dpt.delete(0, END) self.ent_date.delete(0, END) self.txt_combo.set('') self.ent_count.delete(0, END) def update(self): selected_item = self.book_tree.selection()[0] self.item_index = self.book_tree.item(selected_item, 'text') item_data = self.book_tree.item(selected_item, 'values') if item_data[0] == '': messagebox.showerror('error', 'select a row') else: if form.Item_dlt().update_items(item_data[0], self.ent_where.get(), self.ent_to.get(), self.ent_dpt.get_date(), self.ent_date.get_date(), self.txt_combo.get(), self.ent_count.get(), self.txt_flight.get(), self.ent_price.get(), self.user_id): messagebox.showinfo("Item", "Item Updated") self.show_in_treeview() else: messagebox.showerror("Error", "Item cannot be added") def book_flight(self): if self.ent_where.get() == "" or self.ent_to.get( ) == "" or self.ent_dpt.get() == "" or self.ent_date.get( ) == "" or self.txt_combo.get() == "" or self.ent_count.get() == "": messagebox.showerror('Error', 'please enter all required fields') else: try: form.return_flight().form_reg(self.ent_where.get(), self.ent_to.get(), self.ent_dpt.get_date(), self.ent_date.get_date(), self.txt_combo.get(), self.ent_count.get(), self.user_id, self.ent_price.get(), self.txt_flight.get()) messagebox.showinfo('success', 'Register successfull', parent=self.window) self.show_in_treeview() self.clear() except Exception as e: messagebox.showerror('error', f'error:{str(e)}', parent=self.window) def show_in_treeview(self): try: row = form.return_flight().show_in_treeview(self.user_id) if len(row): self.book_tree.delete(*self.book_tree.get_children()) for i in row: self.book_tree.insert("", "end", text=i[0], value=(i[0], i[1], i[2], i[3], i[4], i[5], i[6], i[7], i[8], i[9])) # self.my_connection.commit() self.book_tree.bind('<Double-1>', self.select_item) except Exception as e: messagebox.showerror('error', f'error:{str(e)}', parent=self.window) def select_item(self, event): selected_item = self.book_tree.selection()[0] self.item_index = self.book_tree.item(selected_item, 'text') item_data = self.book_tree.item(selected_item, 'values') dpt_date = datetime.datetime(int(item_data[3][0:4]), int(item_data[3][5:7]), int(item_data[3][8:10])) dpt_date_f = dpt_date.strftime('%m/%d/%y') return_date = datetime.datetime(int(item_data[4][0:4]), int(item_data[4][5:7]), int(item_data[4][8:10])) return_date_f = return_date.strftime('%m/%d/%y') self.ent_where.delete(0, END) self.ent_where.insert(0, item_data[1]) self.ent_to.delete(0, END) self.ent_to.insert(0, item_data[2]) self.ent_dpt.set_date(dpt_date_f) #self.ent_dpt.current() self.ent_date.set_date(return_date_f) #self.ent_date.current() self.txt_combo.set(item_data[5]) self.txt_combo.current() self.ent_count.delete(0, END) self.ent_count.insert(0, item_data[6]) self.txt_classcombo.set(item_data[7]) self.txt_classcombo.current() self.ent_price.delete(0, END) self.ent_price.insert(0, item_data[8]) self.txt_flight.set(item_data[9]) self.txt_flight.current() def fetch_data(self, *args): va = filter(lambda x: x.get('name') == self.txt_classcombo.get(), self.list2) self.ent_price.delete(0, END) self.ent_price.insert(0, next(va).get('price')) def open(self): self.window.withdraw() dd = Toplevel(self.window) Oneway.oneway(self.user_id, dd) def Search_Items(self): con = mysql.connector.connect(host='localhost', user='******', password='', database='register') cur = con.cursor() values = ( str(self.search_by.get()), '"{}"'.format(str(self.search_txt.get() + '%')), ) qry = ( f"SELECT id,destination,source,dpt,date,combo,count_no,user_id,price,flight_name FROM book_flight WHERE user_id={self.user_id} AND {values[0]} LIKE {values[1]}" ) cur.execute(qry) rows = cur.fetchall() if len(rows) != 0: self.book_tree.delete(*self.book_tree.get_children()) for row in rows: self.book_tree.insert("", END, values=row) con.commit() def delete_item(self): selected_item = self.book_tree.selection()[0] item_data = self.book_tree.item(selected_item, 'text') index = item_data if form.Item_dlt().delete_items(index): messagebox.showinfo('Item', 'Item Deleted') self.show_in_treeview() # selected_item = self.item_tree.selection() # self.item_tree.delete(selected_item) else: messagebox.showerror("Error", "Item cannot be deleted", parent=self.window) def generate_bill(self): all_orders = self.book_tree.get_children() bill_list = [] total = 0 # tbl=self.order_tree.item(all_orders[0],'values')[0] # name=self.order_tree.item(all_orders[1],'values')[1] for i in all_orders: order = self.book_tree.item(i, 'values') amt = float(order[5]) * float(order[7]) bill_list.append((order[1], order[2], order[3], order[4], order[5], order[6], order[7], amt)) total += amt BillView(bill_list, total, self.user)