Python 2.7 更改StringVar()变量时,标签未更新
对于我的程序,我使用Python 2.7 更改StringVar()变量时,标签未更新,python-2.7,tkinter,Python 2.7,Tkinter,对于我的程序,我使用StringVar()变量在屏幕之间传递一个值,这意味着我可以处理一些文本并在下一个“屏幕”上显示它 完整程序 在这个程序中,我创建了一个名为foo的stringvariable root=tk.Tk() foo=encrypted_message=tk.StringVar() 然后,我在容器类中创建一个简单的函数,将两个条目添加到一起,然后将stringvar设置为结果 def add(self,a,b): c=str(int(a
StringVar()
变量在屏幕之间传递一个值,这意味着我可以处理一些文本并在下一个“屏幕”上显示它
完整程序
在这个程序中,我创建了一个名为foo的stringvariable
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变量的代码。至少有一个问题是,您正在创建两个
Tk
实例。tkinter程序必须只有一个Tk
实例。如果需要多个窗口,则除第一个窗口外的所有窗口都必须是Toplevel
的实例。我的错误是使用了.get()函数,并且正确调用了Tkinter。您需要提供一个非200行代码。另外,在完整代码上有太多不必要的注释。我看不出这里有什么问题,当我使用加密的\u message.set('new text')
更改StringVar内容时,它确实会更新标签。我做了一个不同的示例,它给出了相同的问题。这里没有足够的代码来重现问题。请至少创建一个完整的示例。@BryanOakley paste.ee/p/0gMqKI无法在使用ProgramScreen类创建的Tk实例中定义字符串变量的位置