如果满足某些条件,如何配置Tkinter小部件?

时间:2015-02-04 09:27:26

标签: python tkinter

通常情况下,这并不难。我通常可以毫不费力地做到这一点。例如:

b = Button(main, text="Button", command=function)
x = 3
def function():
    x -=1
if x == 0:
    b.configure(state=DISABLED)

这会在按下三次后禁用我的按钮。但是,我的问题稍微复杂一些。我想要一个可以根据变量来回切换的按钮,而不仅仅是从一个到另一个。实际上,所有变量都是IntVarStringVar

addB = Button(main, text="Add", command=add)
subtractB = Button(main, text="Subtract", command=subtract)

x = IntVar()
x.set(0)

def add():
    x.set(x.get() + 1)

def subtract():
    x.set(x.get() - 5)

此时,我正在寻找能够禁用减法按钮(subtractB.configure(state=DISABLED))的内容,除非x至少为5。如果在按下按钮之前x大于5,然后x再次小于5,则按钮应再次禁用。这是怎么做到的?

1 个答案:

答案 0 :(得分:1)

您可以trace IntVar,这意味着每次更改变量时都会调用函数。这样,您可以在每次更改时检查x的值,并相应地设置按钮的状态:

def add():
    x.set(x.get() + 1)

def subtract():
    x.set(x.get() - 5)

def trace_var(*args):
    if x.get() < 5:
        subtractB.configure(state=DISABLED)
    else:
        subtractB.configure(state=NORMAL)


main = Tk()

addB = Button(main, text="Add", command=add)
addB.pack()
subtractB = Button(main, text="Subtract", command=subtract)
subtractB.pack()

x = IntVar()
x.trace('w', trace_var)
x.set(0)
Label(main, textvariable=x).pack()

main.mainloop()