我需要一些帮助来更新tkinter中两个或更多帧之间的信息。我正在做一个小项目,我有serval框架信息,每个框架是一个类。
第一帧是设置框架 - 因此用户可以单击某些按钮并选择多个内容。 第二帧应显示所选图像。 到目前为止,我可以在设置页面上做出选择,但是当我点击前进到结果页面时,它会显示空帧,没有图像,也没有做出选择。
我尝试使用应在两个框架/类之间传递的信息来执行一些shared_data,因此我可以在结果页面上访问它们,但有些人不知道如何更新信息。所以它没有显示图像,因为结果页面上的模式在初始时为0。
class xyz (tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
...
self.shared_data = {
"no": tk.IntVar(),
"selectedname": tk.StringVar(),
"selectedpath": tk.StringVar(),
.....
}
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 (SettingPage, PageResults):
page_name = F.__name__
frame = F(container, self)
self.frames[page_name] = frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame("SettingPage")
def show_frame(self, page_name):
frame = self.frames[page_name]
frame.tkraise()
class SettingPage(tk.Frame):
def __init__(self, parent, controller, *args, **kwargs):
tk.Frame.__init__(self, parent, *args, **kwargs)
self.controller = controller
self.controller.shared_data["no"] = 0
...
# after selecting serval buttons
self.controller.shared_data["no"] = 1
buttonContinue = ttk.Button(self, text='''CONTINUE >>''', command=lambda: controller.show_frame("PageResults"))
buttonContinue.place(relx=0.84, rely=0.9, height=43, width=186)
class PageResults(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
mode = self.controller.shared_data["no"]
if mode == 1 :
# show image
#......
我无法向您展示我正在使用的确切实际代码,所以我尝试了这样简化它。我是tkinter的新手,所以任何帮助都会受到很多关注。
谢谢!!
答案 0 :(得分:0)
问题是因为你这样做:
self.shared_data = {
"no": tk.IntVar(),
...
}
然后你会这样做:
self.controller.shared_data["no"] = 0
因此,shared_data["no"]
以IntVar
开头,然后 用整数替换 。
使用IntVar
时,必须使用set
方法更改值,并使用get
方法获取值:
self.controller.shared_data["no"].set(0)
...
if self.controller.shared_data["no"] == 0:
...