Tkinter:从外部函数刷新 frame/window
Tkinter: refresh frame/window from an outside function
我想在 updateCustomerList
完成列表更新后刷新 MainPage
,以便此更新后的列表显示在 MainPage
小部件上。
我试过 tk.show_frame(<frame>)
等等,但由于函数本身没有绑定到主 Tkinter 框架本身,甚至不是 Tkinter 对象,所以我不完全确定如何重新加载页面。有什么建议吗?
下面的代码是我整个程序的一个片段:
customerList = [] #list is updated at the updateCustomerList function; global variable
class POS(tk.Tk):
def __init__(self,*args,**kwargs):
tk.Tk.__init__(self, *args, **kwargs)
container = tk.Frame(self)
container.pack(side = "top", fill = "both", expand = True)
container.grid_rowconfigure(0, weight = 1)
container.grid_columnconfigure(0, weight = 1)
self.frames = {}
for F in (ErrorPage, PaymentPage, MainPage):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column = 0, sticky = "nsew")
#show frame here
class MainPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self,parent)
"""
Tkinter frame that I would like to "refresh" and use the new updated list
"""
frame5Button = ttk.Button(frame5, text = "Add Item", command = lambda: updateCustomerList(barCode, quantity))
frame5Button.grid(row = 0, column = 5, padx = 90, pady = 10)
#This button allows me to go into the updateCustomerList function
def updateCustomerList(barCode, quantity):
#some code to update a list
#when function finishes updating the list, I would like to go back to the MainPage Tk frame and reload all the widgets like labels and entry boxes using the updated customerList list
app = POS()
app.geometry("700x700")
app.resizable(False, False)
app.after(100, MasterFilePopUp)
app.mainloop()
只需删除并重新创建 Mainframe
的实例作为 updateCustomerList
的最后一行:
container = 0 #global variable
在 POS(tk.Tk) 中添加 "global container"
def updateCustomerList(barCode, quantity):
global app
...
app.frames[MainPage].destroy()
app.frames[MainPage] = MainPage(container, app)
app.frames[MainPage].grid(row=0, column = 0, sticky = "nsew")
app.frames[MainPage].tkraise()
#function ends here
我想在 updateCustomerList
完成列表更新后刷新 MainPage
,以便此更新后的列表显示在 MainPage
小部件上。
我试过 tk.show_frame(<frame>)
等等,但由于函数本身没有绑定到主 Tkinter 框架本身,甚至不是 Tkinter 对象,所以我不完全确定如何重新加载页面。有什么建议吗?
下面的代码是我整个程序的一个片段:
customerList = [] #list is updated at the updateCustomerList function; global variable
class POS(tk.Tk):
def __init__(self,*args,**kwargs):
tk.Tk.__init__(self, *args, **kwargs)
container = tk.Frame(self)
container.pack(side = "top", fill = "both", expand = True)
container.grid_rowconfigure(0, weight = 1)
container.grid_columnconfigure(0, weight = 1)
self.frames = {}
for F in (ErrorPage, PaymentPage, MainPage):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column = 0, sticky = "nsew")
#show frame here
class MainPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self,parent)
"""
Tkinter frame that I would like to "refresh" and use the new updated list
"""
frame5Button = ttk.Button(frame5, text = "Add Item", command = lambda: updateCustomerList(barCode, quantity))
frame5Button.grid(row = 0, column = 5, padx = 90, pady = 10)
#This button allows me to go into the updateCustomerList function
def updateCustomerList(barCode, quantity):
#some code to update a list
#when function finishes updating the list, I would like to go back to the MainPage Tk frame and reload all the widgets like labels and entry boxes using the updated customerList list
app = POS()
app.geometry("700x700")
app.resizable(False, False)
app.after(100, MasterFilePopUp)
app.mainloop()
只需删除并重新创建 Mainframe
的实例作为 updateCustomerList
的最后一行:
container = 0 #global variable
在 POS(tk.Tk) 中添加 "global container"
def updateCustomerList(barCode, quantity):
global app
...
app.frames[MainPage].destroy()
app.frames[MainPage] = MainPage(container, app)
app.frames[MainPage].grid(row=0, column = 0, sticky = "nsew")
app.frames[MainPage].tkraise()
#function ends here