我是新的OOP和UI开发使用tkinter。我目前有以下代码:
class Snapshot_app(Tk):
def __init__(self):
Tk.__init__(self)
container = Frame(self)
container.pack(side="top", fill="both", expand=True)
self.frames = {}
for F in (StartPage, PageOne,PageTwo):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky=NSEW)
self.show_frame(StartPage)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
Class PageOne(Frame):
def __init__(self, parent, controller):
Frame.__init__(self, parent)
Label(self, text="Path to files").grid(row=1,column=0)
self.fname = Entry(self)
self.fname.grid(row=1, column=1)
app.frames[PageTwo].dummy = self.fname.get()
b = Button(self,text="Open Page 2",command=lambda:app.show_frame(PageTwo)).grid(row=2,column=1)
Class PageTwo(Frame):
def __init__(self, parent, controller,dummy=None):
Frame.__init__(self, parent)
self.data = dummy
print(self.data)
app = Snapshot_app()
app.title("Snapshot Tool")
app.geometry("1200x400")
app.mainloop()
在PageTwo类中,它给我一个错误self.data=无. 这意味着我无法将虚拟信息从第一页传递到第二页。但是,如果我在第二页上放一个按钮,它的事件会触发自我数据,我能够成功地从PageOne获取数据。不过,我想避免使用按钮。任何建议和帮助将不胜感激!在
问题是关于PageTwo实例的创建。 您的实例化
Snapshot_app()
。循环开始并实例化StartPage
,后跟PageOne
。此时,PageOne.__init__
被称为哪个集合app.frames[PageTwo].dummy = self.fname.get()
在我看来,这甚至不应该起作用,因为PageTwo还没有添加到}条目并在没有伪参数的情况下实例化它,从而导致}。在
app.frames
中,因为循环是在PageOne
位置。如果是这样,您应该收到一个KeyError: PageTwo
。如果不是这样(我不知道,您是否共享了整个代码),如果您已经在其他地方实例化了它,那么它将存在,但是在实例化PageOne
之后,for循环将继续PageTwo
覆盖整个现有的{self.data = dummy
成为{相关问题 更多 >
编程相关推荐