最近我的代码中有一部分被卡住了,这对我来说似乎没有多大意义。我正忙于一个有多个屏幕的程序来监控一个水处理过程。在设置页面中,有单选按钮选项可与其他设置一起选择过滤器数量(1-4)。要对这些单选按钮进行分组,使用Filter_Num = tk.IntVar()
,然后通过4个单选按钮分配值
Filt1=tk.Radiobutton(self, text = "1" ,variable=Filter_Num,value=1)
Filt1.place(x=700,y=141)
Filt2=tk.Radiobutton(self, text = "2" ,variable=Filter_Num,value=2)
Filt2.place(x=750,y=141)
Filt3=tk.Radiobutton(self, text = "3" ,variable=Filter_Num,value=3)
Filt3.place(x=700,y=160)
Filt4=tk.Radiobutton(self, text = "4" ,variable=Filter_Num,value=4)
Filt4.place(x=750,y=160)
现在在另一个显示控制选项的页面上使用这个,我有一个显示输出状态的函数,它每500毫秒更新一次,黑色是禁用的,但是当使用比较运算符时
if Filter_Num < 4:
self.Filter4Can.itemconfigure(self.Filter_4i, fill="black")
elif (Filter_4_Solenoid == 1) and (Filter_Num >= 4):
self.Filter4Can.itemconfigure(self.Filter_4i, fill="green")
else:
self.Filter4Can.itemconfigure(self.Filter_4i, fill="red")
程序在'IntVar'和'int'实例之间运行错误“TypeError:'<;”
可以理解,因此我需要使用.get()或.getvar()来检索变量内的值,例如self.Filter_Number = Filter_Num.get()
,但如果这样做,我会得到错误“AttributeError:'int'对象没有属性'get'”
如果我理解正确,它要么告诉我它是一个IntVar,不能比较,要么告诉我它是一个整数,不能从中得到值。我错过什么了吗?我对这门语言相当陌生
更奇怪的是在if中使用IntVar时
if Filter_4_Solenoid == 1:
x = Filter_Num
x = x.get()
print(x)
值转换没有问题,我可以得到1-4,但在If之外,问题仍然存在
看到我的愚蠢的错误后,设法让它工作起来。这些错误是由于GUI类的初始化顺序造成的。监控GUI类在设置GUI屏幕之前启动,其中单选按钮变量被分组为IntVar()类。通过更改它们在MainView类中初始化的顺序并首先运行Setup类(实际上是我的第6页),可以解决这个问题。简化后的代码如下所示
尽管实际错误与预期略有不同,而且是一个愚蠢的错误,但我将把这个问题留待讨论
回答=确保代码的运行顺序正确
您正在声明两个
Filter_Num < 4
都在抛出一个错误,声明Filter_Num
是一个IntVar
,并且Filter_Num.get()
都在抛出一个错误,声明Filter_Num
是一个int。这两个错误不可能都是真的如果
Filter_Num
确实是IntVar
的实例,就像您声称的那样,那么在表达式中使用该值之前,需要使用.get()
方法获取该值:毫无疑问,这就是在表达式中使用
IntVar
实例的方式如果抛出错误
"AttributeError:'int' object has no attribute 'get'"
,唯一可能的解释是Filter_Num
是一个int
,因为错误告诉您它是一个int
。如果这是真的,那么if Filter_Num < 4
绝对有效相关问题 更多 >
编程相关推荐