python - 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)
解决方案
推荐阅读
- json - Json 给出空值
- javascript - Firefox 中的 jQuery - 事件未定义,为什么?
- c++ - 未评估上下文中的默认模板参数和 lambda:错误还是功能?
- alfresco - 使用 Alfresco API 上传新版本的文件
- sql - 三表关系——跨三个ID的唯一性
- google-analytics - 关于何时弃用 Google Analytics(分析)报告 API v3 或 v4 是否有截止日期?
- chronicle - 日志记录器的日志级别设置为“TRACE”导致 AbstractMethodError
- python - 在 docker 容器中调试 python 代码而不需要重建
- javascript - Gatsby,React Native Web - GraphQL 错误预期类型 Craft_SectionsEnum
- c# - 从 Postman 测试时出现错误:HTTP Error 401.2 - Unauthorized