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()
移动到类的构造函数中。这可能不是最佳的解决方案,但对我来说它是有效的