对于我的程序,我使用StringVar()
变量在屏幕之间传递一个值,这意味着我可以处理一些文本并将其显示在下一个"屏幕"。
在这个程序中,我创建了一个名为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变量答案 0 :(得分:0)
至少有一个问题是您要创建两个Tk
实例。 tkinter程序必须只有一个Tk
实例。如果您需要多个窗口,除第一个窗口外的所有窗口都需要是Toplevel
的实例。
答案 1 :(得分:0)
我的错误是我使用了.get()函数以及我正确调用了Tkinter。