【发布时间】:2020-10-10 13:22:28
【问题描述】:
我有一个 gui 应用程序,其中导航栏具有在帧之间切换的按钮。在起始页上有一个用于获取文件名的条目小部件和一个用于显示所有已保存文件名的列表框。当从列表框中选择文件名时,将打开另一个页面,显示所选文件名。
我相信答案here 在开始时会创建框架对象,将它们堆叠起来并提升调用的任何框架。但我认为我的窗口每次被调用时都需要更新,以便它可以显示不同的文件名。它也被放置在与其他框架完全相同的位置,这样我仍然可以使用导航栏按钮切换到其他主页和其他窗口。我发现了类似 here 的东西,但我无法理解。
(我的实际应用比这个复杂一点,但我认为这是我的问题的一个小而精确的表示)
编辑:
import tkinter as tk
class MainApplication(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(1, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames={}
for F in (StartPage,PageOne):
page_name = F.__name__
frame = F(parent=container, controller=self)
self.frames[page_name] = frame
frame.grid(row=1, column=0, sticky="nsew")
self.show_frame("StartPage")
def show_frame(self, page_name):
frame = self.frames[page_name]
frame.tkraise()
class StartPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self,parent)
self.list_box = tk.Listbox(self)
self.list_box.pack()
for item in ["file 1", "file 2", "file 3"]:
self.list_box.insert(tk.END, item)
button1 = tk.Button(self, text='Go to next Page', command=lambda: self.getvalue(controller))
button1.pack()
def getvalue(self, controller):
clicked_item=self.list_box.curselection()
selected_file=self.list_box.get(clicked_item)
print(selected_file)
controller.show_frame('PageOne')
class PageOne(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
# ....selected file name to be displayed here....
button1 = tk.Button(self, text="Back to Home", command=lambda: controller.show_frame('StartPage'))
button1.pack()
app = MainApplication()
app.geometry("400x400")
app.mainloop()
【问题讨论】:
-
@stovfl 您建议的答案可以正常工作,但我有一个问题,据我了解,发生的情况是框架相互堆叠,然后在堆叠顺序。但是,在我的应用程序中,我想要的是,当我从 Window 2 切换回 Window 1 时,该窗口的内容会更新或刷新,并且不会与以前保持相同。你知道我该怎么做吗?
-
@stovfl 我已经添加了代码...我不知道每次我想从 StartPage 转到 PageOne 时如何传递 selected_file 名称
标签: tkinter