如何嵌入if和elif与tkinter小部件

时间:2014-12-05 03:04:21

标签: python tkinter

我想尝试在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)

1 个答案:

答案 0 :(得分:1)

您可以使用双if-else语句,如:

foreground='red' if equipTemp2.get() >= hightempset else 'blue' if equipTemp2.get() <= lowtempset else 'white'

由于您使用equipTemp2作为textvariable,我认为它是tkinter IntVarDoubleVar所以您必须使用.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)。