Python Tkinter标签小部件没有';t更新
下面是一段简化的代码,它不能像我希望的那样工作:Python Tkinter标签小部件没有';t更新,python,tkinter,Python,Tkinter,下面是一段简化的代码,它不能像我希望的那样工作: def get_tl(self,x): self.var_tl = IntVar() if x == "Random (max = 6)": self.var_tl.set(randint(1,6)) else: ask_tl = Toplevel() def destroy_t_set_tl(): self.var_tl.se
def get_tl(self,x):
self.var_tl = IntVar()
if x == "Random (max = 6)":
self.var_tl.set(randint(1,6))
else:
ask_tl = Toplevel()
def destroy_t_set_tl():
self.var_tl.set(entry_tl_t.get())
ask_tl.destroy()
label_tl_t = Label(ask_tl, text="length:").pack(side=LEFT)
entry_tl_t = Entry(ask_tl, width=25)
entry_tl_t.pack(side=LEFT)
button_enter_tl_t = Button(ask_tl, text="Enter", command=destroy_t_set_tl).pack(side=LEFT)
self.label_tl = Label(self, text="length:").grid(row=1,column=0)
# This only shows the right number when "Random (max = 6)". When "Manual" it shows 0
self.show_tl = Label(self, text=self.var_tl.get()).grid(row=1,column=1)
def get_values(self):
# This always shows the right number.
self.total_label = Label(self, text=self.var_tl.get()).grid(row=4,column=0)
OptionMenu小部件调用函数get\u tl
,该小部件为x提供值:“手动”
或“随机(最大=6)”
当调用此函数时,我希望它选择一个随机数或打开一个顶级窗口,通过一个条目向用户询问一个数字。选择随机数或用户给出一个数字后。数字需要显示为标签,以便用户可以查看数字是否正确。
标签仅在“随机(最大值为6)”时显示正确的数字。当“手动”
时,显示0
按下按钮后,调用函数get\u values
。但是,无论是手动还是随机,此都会给出正确的数字
我可能犯了一个简单的错误。但我看不到它。在这一部分:
def get_tl(self,x):
self.var_tl = IntVar()
您一次又一次地重新创建变量,因此它保留默认值0
,如中所述:
值是可选值(默认为0)
然后,如果x==“Random(max=6)”
仅设置变量,因此在所有其他情况下,它将保持默认值
可能要删除此行:
self.var_tl = IntVar()
您应该只在类的构造函数中拥有它。然后,您的所有方法都将共享由
self.var\u tl
指出的相同实例这似乎是我自己问题的答案:
def get_tl(self,x):
def tl():
self.label_tl = Label(self, text="length:").grid(row=1,column=0)
self.show_tl = Label(self, text=self.var_tl.get()).grid(row=1,column=1)
if x == "Random (max = 6)":
self.var_tl.set(randint(1,6))
tl()
else:
ask_tl = Toplevel()
def destroy_t_set_tl():
self.var_tl.set(entry_tl_t.get())
ask_tl.destroy()
tl()
label_tl_t = Label(ask_tl, text="length:").pack(side=LEFT)
entry_tl_t = Entry(ask_tl, width=25)
entry_tl_t.pack(side=LEFT)
button_enter_tl_t = Button(ask_tl, text="Enter", command=destroy_t_set_tl).pack(side=LEFT)
def get_values(self):
self.total_label = Label(self, text=self.var_tl.get()).grid(row=4,column=0)
现在,选项“手动”
和“随机”
都将调用函数tl()
,该函数将显示数字,以便用户检查。
我还将self.var\u tl=IntVar()
移动到类的构造函数中。这可能不是最佳的解决方案,但对我来说它是有效的