【问题标题】:how embed if and elif with tkinter widget如何使用 tkinter 小部件嵌入 if 和 elif
【发布时间】:2015-02-03 03:52:19
【问题描述】:

我想尝试在 tkinter 标签小部件中使用 if/elif/else 条件来检查三个条件之一,并根据这些结果更改前景色...

条件 1equipTemp 等于或大于 hightempset [标签小部件的前景颜色 = 'red']

条件 2equipTemp 等于或小于 lowtempset [标签小部件的前景颜色 = '蓝色']

条件 3equipTemp 小于 hightempset 且大于 lowtempset {或者,换句话说,conditi 不满足 #1 和 #2 } [标签小部件的前景色 = 'white']

我试图在其中执行此操作的一行代码是:

Label4=Label(root, textvariable=equipTemp2, foreground='red' if equipTemp2 => hightempset  elif equipTemp2 =< lowtempset 'blue' else 'white', width=6, justify=LEFT)

【问题讨论】:

  • 将颜色分配给变量,根据您的条件更新该变量,调用小部件的刷新。
  • 为什么要在一行中完成?将它放在其他一两行有什么问题?
  • 我有很多标签,我想在其中应用它,我只是好奇是否可以这样做,看到了使用 if/else 但没有使用 if/elif/else 的示例......

标签: python tkinter


【解决方案1】:

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

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

由于您使用equipTemp2 作为文本变量,我认为它是一个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) .

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-18
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    • 2021-06-08
    • 2020-01-05
    • 2015-02-17
    相关资源
    最近更新 更多