首页 > 解决方案 > 在不创建全新表的情况下更新表中的数据

问题描述

所以我正在制作一个使用选项卡菜单显示两个表的程序,我希望这些表在您切换选项卡时刷新并从我的 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 只是一个庞大程序的一部分

给出的代码没有给出任何错误,而是没有按照我想要的方式更新表格,它应该更新以在两个选项卡上给我一个不同的表格,但是我在两个选项卡上都得到了同一个表格。

标签: python-3.xclassuser-interfacettk

解决方案


只是对于任何遇到这篇文章寻找或解决方案的人,我确实设法解决了这个问题,而不是尝试使用类的同一个实例,我使用以下代码行将实例转换为两个类:

    HistoryApp = App(HistoryTab)
    OrderApp = App(OrderTab)

然后使用这两个实例,我调用了正确的函数来允许将不同的数据集加载到两个不同的实例中:

    OrderApp.Load()
    HistoryApp.LoadHist()

简而言之,我所做的不是使用同一个表并更新表的内容,而是使用同一个类制作了两个单独的表并将它们存储到一个变量中,然后从类中调用两个不同的函数来加载两组不同的数据。


推荐阅读