我想尝试在tkinter标签小部件中使用if / elif / else条件来检查三个条件中的一个,并根据这些结果更改前景色...
条件1 equipTemp等于或大于hightempset [标签小部件的前景色='红色']
条件2 equipTemp等于或小于lowtempset [标签小部件的前景色='蓝色']
条件3 equipTemp小于hightempset且大于lowtempset {或者,在其他方面conditi 不符合#1和#2} [标签小部件的前景色='白色']
我正在尝试执行此操作的一行代码是:
Label4=Label(root, textvariable=equipTemp2, foreground='red' if equipTemp2 => hightempset elif equipTemp2 =< lowtempset 'blue' else 'white', width=6, justify=LEFT)
答案 0 :(得分:1)
您可以使用双if-else语句,如:
foreground='red' if equipTemp2.get() >= hightempset else 'blue' if equipTemp2.get() <= lowtempset else 'white'
由于您使用equipTemp2
作为textvariable,我认为它是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-except块仅仅是因为当你在spinbox中输入内容时,变量会短暂变为''
,而IntVar
无法处理(它会给ValueError
)。