当我更改StringVar()变量时,我的标签没有更新

时间:2017-01-24 11:19:19

标签: python-2.7 tkinter

对于我的程序,我使用StringVar()变量在屏幕之间传递一个值,这意味着我可以处理一些文本并将其显示在下一个"屏幕"。

完整计划 https://paste.ee/p/0gMqK

在这个程序中,我创建了一个名为foo

的字符串变量
    root=tk.Tk()
    foo=encrypted_message=tk.StringVar()

然后我在容器类中创建一个简单的函数,将两个条目一起添加,然后将stringvar设置为结果

    def add(self,a,b):
        c=str(int(a)+int(b))
        foo.set(c)
        self.show_frame("Screen2")

然后我在屏幕1上调用命令

    button1=tk.Button(self,text="Lorem",command=lambda: controller.add(entry1.get(),entry2.get()))

我现在想将屏幕2上的标签更改为我将其设置为的字符串var()的值。

    label1=tk.Label(self,textvariable=foo)

当我运行程序时,屏幕2只是一个空白屏幕,即使我更改了stringvar的值,标签文本也没有更新

完整计划

    import Tkinter as tk
    class ProgramScreen(tk.Tk):
        def __init__(self,*args,**kwargs):
            tk.Tk.__init__(self,*args,**kwargs)
            container=tk.Frame(self)
            container.pack(expand=True, fill="both")
            container.grid_rowconfigure(0,weight=1)
            self.frames={}
            self.foo=tk.StringVar()
            for F in (Screen1,Screen2):
                page_name=F.__name__
                frame=F(parent=container,controller=self)
                self.frames[page_name]=frame
                frame.grid(row=0,column=0,sticky="nsew")
                self.show_frame("Screen1")
        def show_frame(self,page_name):
            frame=self.frames[page_name]
            frame.tkraise()
        def add(self,a,b):
            c=str(int(a)+int(b))
            foo.set(c)
            self.show_frame("Screen2")
    class Screen1(tk.Frame):
        def __init__(self,parent,controller):
            tk.Frame.__init__(self,parent)
            self.controller=controller
            self.pack(fill="x",expand=1)
            entry1=tk.Entry(self)
            entry1.pack()
            entry2=tk.Entry(self)
            entry2.pack()
            button1=tk.Button(self,text="Lorem",command=lambda: controller.add(entry1.get(),entry2.get()))
                button1.pack()
    class Screen2(tk.Frame):
        def __init__(self,parent,controller):
            tk.Frame.__init__(self,parent)
            self.controller=controller
            self.pack(fill="x",expand=1)
            label1=tk.Label(self,textvariable=controller.foo.get())
            label1.pack()

    if __name__ == "__main__":
        app = ProgramScreen()
        app.mainloop()

- 编辑 -

我已修复代码以在programScreen类

中调用stringVar变量

2 个答案:

答案 0 :(得分:0)

至少有一个问题是您要创建两个Tk实例。 tkinter程序必须只有一个Tk实例。如果您需要多个窗口,除第一个窗口外的所有窗口都需要是Toplevel的实例。

答案 1 :(得分:0)

我的错误是我使用了.get()函数以及我正确调用了Tkinter。