首页 > 解决方案 > Python Tkinter treeview mysql 编辑库存

问题描述

我正在使用具有 mysql 功能的 python tkinter 开店。一切看起来都很好,但是当我没有选择任何内容并按下编辑按钮时,出现错误

  File "C:\Users\ADMIN\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 1892, in __call__
    return self.func(*args)
  File "D:\2nd Year - 3rd Term\IT0011 - INTEGRATIVE PROGRAMMING AND TECHNOLOGIES\Final Project\admin.py", line 871, in update_product
    inv_edit.mainloop()
NameError: name 'inv_edit' is not defined

这是什么错误?谢谢我声明了inv_edit的全局变量。

class Inventory:
    def update_product(self):

    global inv_edit
    global page5
    global valll

    if len(self.sel) == 1:
        inv_edit = Toplevel()
        page5 = Edit_Product(inv_edit)
        inv_edit.protocol("WM_DELETE_WINDOW", self.ex2)

        valll = []
        for i in self.sel:
            for j in self.tree.item(i)["values"]:
                valll.append(j)

        page5.entry1.insert(0, valll[1])
        page5.entry2.insert(0, valll[2])
        page5.entry3.insert(0, valll[0])
        page5.entry4.insert(0, valll[3])
        page5.entry5.insert(0, valll[4])
        page5.entry6.insert(0, valll[5])
        page5.entry7.insert(0, valll[6])
        page5.entry8.insert(0, valll[7])

    elif len(self.sel) == 0:
        messagebox.showerror("Error", "Please choose a product to update.", parent=inv)
    else:
        messagebox.showerror("Error", "Can only update one product at a time.", parent=inv)

    inv_edit.mainloop()

其他代码:

class Edit_Product:
def __init__(self, top=None):
    top.geometry("1366x768")
    top.resizable(0, 0)
    top.title("Inventory")

    self.userReg_Form = Label(inv_edit)
    self.userReg_Form.place(relx=0, rely=0, width=1366, height=768)
    self.userReg_FormImage = Image.open("./images/Inventory_edit.png")
    self.userReg_FormImageResized = self.userReg_FormImage.resize((1366, 768), Image.ANTIALIAS)
    self.userReg_FormImage = ImageTk.PhotoImage(self.userReg_FormImageResized)
    self.userReg_Form.configure(image=self.userReg_FormImage)

    self.entry1 = Entry(inv_edit)
    self.entry1.place(relx=0.280, rely=0.305, width=370, height=18)
    self.entry1.configure(font="-family {Poppins} -size 10")
    self.entry1.configure(relief="flat")
    self.entry1.configure(bg="#dadada")

    self.entry2 = Entry(inv_edit)
    self.entry2.place(relx=0.280, rely=0.35, width=370, height=18)
    self.entry2.configure(font="-family {Poppins} -size 10")
    self.entry2.configure(relief="flat")
    self.entry2.configure(bg="#dadada")

    self.entry3 = Entry(inv_edit)
    self.entry3.place(relx=0.280, rely=0.39, width=370, height=18)
    self.entry3.configure(font="-family {Poppins} -size 10")
    self.entry3.configure(relief="flat")
    self.entry3.configure(bg="#dadada")

    self.entry4 = Entry(inv_edit)
    self.entry4.place(relx=0.280, rely=0.435, width=370, height=18)
    self.entry4.configure(font="-family {Poppins} -size 10")
    self.entry4.configure(relief="flat")
    self.entry4.configure(bg="#dadada")

    self.entry5 = Entry(inv_edit)
    self.entry5.place(relx=0.280, rely=0.475, width=370, height=18)
    self.entry5.configure(font="-family {Poppins} -size 10")
    self.entry5.configure(relief="flat")
    self.entry5.configure(bg="#dadada")

    self.entry6 = Entry(inv_edit)
    self.entry6.place(relx=0.280, rely=0.525, width=370, height=18)
    self.entry6.configure(font="-family {Poppins} -size 10")
    self.entry6.configure(relief="flat")
    self.entry6.configure(bg="#dadada")

    self.entry7 = Entry(inv_edit)
    self.entry7.place(relx=0.280, rely=0.580, width=370, height=18)
    self.entry7.configure(font="-family {Poppins} -size 10")
    self.entry7.configure(relief="flat")
    self.entry7.configure(bg="#dadada")

    self.entry8 = Entry(inv_edit)
    self.entry8.place(relx=0.280, rely=0.630, width=370, height=18)
    self.entry8.configure(font="-family {Poppins} -size 10")
    self.entry8.configure(relief="flat")
    self.entry8.configure(bg="#dadada")

def update(self):
    pid = self.entry1.get()
    pname = self.entry2.get()
    pstatus = self.entry3.get()
    pqty = self.entry4.get()
    psupp = self.entry5.get()
    pprice = self.entry6.get()
    ppurchdate = self.entry7.get()
    pexpdate = self.entry8.get()

    if pname.strip():
        if pqty:
            if psupp.strip():
                if pprice:
                    try:
                        float(pprice)
                    except ValueError:
                        messagebox.showerror("Oops!", "Invalid cost price.", parent=inv_edit)
                    else:
                        if ppurchdate:
                            if pexpdate:
                                product_id = valll[0]
                                # with sqlite3.connect("./Database/store.db") as db:
                                #    cur = db.cursor()
                                update = (
                                    "UPDATE inventory SET prod_name = ?, quantity = ?, supplier = ?, price = ?, purchase_date = ?, expiration_date = ? WHERE prod_id = ?"
                                )
                                cur.execute(update,
                                            [pname, pqty, psupp, float(pprice), ppurchdate,
                                             pexpdate, pid])
                                db.commit()
                                messagebox.showinfo("Success!!",
                                                    "Product successfully updated in inventory.",
                                                    parent=inv_edit)
                                valll.clear()
                                Inventory.sel.clear()
                                page3.tree.delete(*page3.tree.get_children())
                                page3.DisplayData()
                                inv_edit.destroy()
                            else:
                                messagebox.showerror("Oops!", "Invalid date.", parent=inv_edit)
                        else:
                            messagebox.showerror("Oops!", "Invalid date", parent=inv_edit)
                else:
                    messagebox.showerror("Oops!", "Please enter product cost price.", parent=inv_edit)
            else:
                messagebox.showerror("Oops!", "Please enter supplier.", parent=inv_edit)
        else:
            messagebox.showerror("Oops!", "Please enter quantity.", parent=inv_edit)
    else:
        messagebox.showerror("Oops!", "Please enter product name", parent=inv_edit)

标签: pythontkintertreeview

解决方案


推荐阅读