python-3.x - 在不创建全新表的情况下更新表中的数据
问题描述
所以我正在制作一个使用选项卡菜单显示两个表的程序,我希望这些表在您切换选项卡时刷新并从我的 SQLite 数据库加载不同的数据集。问题是我无法让它刷新,无论是由于全局变量还是由于子程序,程序的实际 SQLite 编码部分都不是问题。
我主要尝试弄乱不同的变量并四处移动,因为我并不真正理解这个问题,而且我已经设法让自己非常困惑。
def OrderMenu():
class App(Frame):
def __init__(self, parent):
Frame.__init__(self, parent)
Frame.pack(self, fill = BOTH)
self.CreateUI()
self.LoadTable()
self.grid(stick = (W))
def CreateUI(self):
table = Treeview(self)
table["columns"] = ("product", "productcode", "quantity", "status")
table.column("#0", anchor = "w", width = 0)
table.heading("product" , text ="Name")
table.column("product" , anchor = "center" , width = 200)
table.heading("productcode", text = "Item Name")
table.column("productcode", anchor = "center" , width = 200)
table.heading("quantity", text = "Amount")
table.column("quantity", anchor = "center" , width = 200)
table.heading("status", text = "Status",)
table.column("status", anchor = "center" , width = 200)
table.grid(stick = (N,S,W,E))
self.treeview = table
self.grid_rowconfigure(0, weight = 1)
self.grid_columnconfigure(0, weight = 1)
def LoadTable(self):
def Load():
if Type == "Normal":
conn = sqlite3.connect("Order.db")
cursor = conn.execute("SELECT Name, Item, Amount, Status FROM OrdersTab WHERE Name = ?"(Username))
for row in cursor:
self.treeview.insert("", "end", values = (row[0], row[1], row[2], row[3]))
elif Type == "Admin":
conn = sqlite3.connect("Order.db")
cursor = conn.execute("SELECT Name, Item, Amount, Status FROM OrdersTab ")
for row in cursor:
self.treeview.insert("", "end", values = (row[0], row[1], row[2], row[3]))
def LoadHist():
if Type == "Normal":
conn = sqlite3.connect("Order.db")
cursor = conn.execute("SELECT Name, Item, Amount, Status FROM HistoryTab WHERE Name = ?" (Username))
for row in cursor:
self.treeview.insert("", "end", values = (row[0], row[1], row[2], row[3]))
elif Type == "Admin":
conn = sqlite3.connect("Order.db")
cursor = conn.execute("SELECT Name, Item, Amount, Status FROM HistoryTab")
for row in cursor:
self.treeview.insert("", "end", values = (row[0], row[1], row[2], row[3]))
global X
X = 1
Tabid = TabID
while X == 1:
if Tabid == 0:
Load()
X = 0
elif Tabid == 1:
LoadHist()
X = 0
def Exit():
window.destroy()
if Type == "Normal":
StanMain()
elif Type == "Admin":
AdMain()
else:
print("Account Error")
window = Tk()
window.geometry("500x500")
def OnClick(event):
TabID = main.index(main.select())
X = 1
main = ttk.Notebook(window)
main.pack(fill = BOTH, expand = True)
root = ttk.Frame(main)
main.bind("<Button-1>", OnClick)
history = ttk.Frame(main)
main.add(root, text = "On Going Orders")
main.add(history, text = "Order History")
TabID = main.index(main.select())
X = 1
App(root).pack(fill = BOTH, expand = True)
App(history).pack(fill = BOTH, expand = True)
menubar = Menu(root)
window.config(menu = menubar)
filemenu = Menu(menubar)
menubar.add_command(label = "Back", command = Exit)
menubar.add_command(label = "Add Order")
window.mainloop
很抱歉代码如此混乱,这是我目前正在编辑的程序部分,这个 GUI 只是一个庞大程序的一部分
给出的代码没有给出任何错误,而是没有按照我想要的方式更新表格,它应该更新以在两个选项卡上给我一个不同的表格,但是我在两个选项卡上都得到了同一个表格。
解决方案
只是对于任何遇到这篇文章寻找或解决方案的人,我确实设法解决了这个问题,而不是尝试使用类的同一个实例,我使用以下代码行将实例转换为两个类:
HistoryApp = App(HistoryTab)
OrderApp = App(OrderTab)
然后使用这两个实例,我调用了正确的函数来允许将不同的数据集加载到两个不同的实例中:
OrderApp.Load()
HistoryApp.LoadHist()
简而言之,我所做的不是使用同一个表并更新表的内容,而是使用同一个类制作了两个单独的表并将它们存储到一个变量中,然后从类中调用两个不同的函数来加载两组不同的数据。
推荐阅读
- linux - 如何使用 Linux Bash 指令用文件的特殊字符替换一行?
- python - 可能包含或不包含毫秒的解析日期
- android - Android Room Not Recognizing Column Name From Schema(使用别名作为列名)
- dialogflow-es - 在用户提出机器人问题并得到答案后,如何让用户回到主要问题?
- html - 带有合并单元格的 Google 电子表格表格到 Gmail
- python - 我需要帮助来清理我的代码
- python - 在python中实现合并排序时出现错误
- javascript - .map 后的 D3.js 数组双引号
- docker - Openedx devstack 安装
- python - Python 统计包 mean() 从 pandas 数据框中给出了错误的答案