PythonTkinter在类或帧之间传递变量

2024-05-15 20:40:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我是新的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获取数据。不过,我想避免使用按钮。任何建议和帮助将不胜感激!在


Tags: selfappframesinitcontainerdefsnapshotcolumn
1条回答
网友
1楼 · 发布于 2024-05-15 20:40:38

问题是关于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成为{}。在

相关问题 更多 >