我想尝试在tkinter标签小部件中使用if/elif/ the条件来检查三个条件中的一个,并根据这些结果更改前景颜色.
条件1 equipTemp等于或大于标签小部件的高温度设置前景色= 'red‘
条件2 equipTemp等于或小于标签小部件的低温度设置前景色=“蓝色”
条件3 equipTemp小于高温度集,大于低温度集{或换句话说,标记小部件的前景颜色不满足#1和#2 }
我尝试用的一行代码是:
Label4=Label(root, textvariable=equipTemp2, foreground='red' if equipTemp2 => hightempset elif equipTemp2 =< lowtempset 'blue' else 'white', width=6, justify=LEFT)
发布于 2014-12-05 00:33:37
您可以使用双重if-else语句,例如:
foreground='red' if equipTemp2.get() >= hightempset else 'blue' if equipTemp2.get() <= lowtempset else 'white'
由于您使用equipTemp2
作为文本可视化,所以我假设它是一个tkinter、IntVar
或DoubleVar
,所以您必须使用.get()
方法。如果是StringVar
,则必须使用int(equipTemp2.get())
或float(equipTemp2.get())
。
但是,我真的认为这样做确实会损害可读性,并且请注意,这个表达式只有在标签开始时才进行评估,所以如果equipTemp2
改变了,颜色就不会改变。
如果您确实想在变量每次更改时更改标签的颜色,您可以在变量更改时使用trace
变量并应用前景颜色,如下所示:
from Tkinter import *
def callback(*args):
try:
Label4.config(foreground='red' if equipTemp2.get() >= hightempset else 'blue' if equipTemp2.get() <= lowtempset else 'white')
except ValueError:
pass
root = Tk()
equipTemp2 = IntVar()
hightempset = 50
lowtempset = 10
Label4=Label(root, textvariable=equipTemp2, width=6, justify=LEFT)
Label4.pack()
equipTemp2.trace("w", callback)
equipTemp2.set(15)
sb = Spinbox(root, textvariable=equipTemp2, from_=0, to=100)
sb.pack()
root.mainloop()
注意,try- you块仅仅是因为当您在spinbox中键入某些内容时,变量会在短时间内变成''
,这是IntVar
无法处理的(它将给出一个ValueError
)。
https://stackoverflow.com/questions/27308065
复制相似问题