这是一段简单的代码,根据我的意愿不起作用:
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)
函数get_tl
由OptionMenu小部件调用,该小部件为x提供值:"Manual"
或"Random (max = 6)"
。
当调用此函数时,我希望它选择一个随机数或打开一个Toplevel窗口,通过一个Entry向用户询问一个数字。选择随机数或用户给出数字后。该号码需要显示为标签,以便用户可以查看该号码是否正确。
标签仅在"Random (max = 6)"
时显示正确的数字。当"Manual"
显示为0
按下按钮后,将调用函数get_values
。但是确实给出正确的数字,无论是手动还是随机。
我可能在这里犯了一个简单的错误。但我没有看到它。
答案 0 :(得分:0)
在这部分:
def get_tl(self,x):
self.var_tl = IntVar()
您反复重新创建变量,因此它保留默认值0
,如the documentation中所述:
VALUE是可选值(默认为0)
然后,如果x == "Random (max = 6)"
设置变量 ,那么在所有其他情况下,它将保持默认值。
可能你想删除这一行:
self.var_tl = IntVar()
你应该只在你班级的构造函数中拥有它。然后,您的所有方法将共享self.var_tl
指向的同一实例。
答案 1 :(得分:0)
这似乎是我自己问题的答案:
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)
现在选项"Manual"
和"Random"
都会调用函数tl()
,它会显示数字,以便用户查看。
我还将self.var_tl = IntVar()
移动到了类的构造函数中。它可能不是最佳解决方案,但对我来说它有效。