如果满足某些条件,如何配置 Tkinter 小部件?
How to configure Tkinter widgets if certain conditions are met?
通常,这并不难。我通常可以毫不费力地做到这一点。例如:
b = Button(main, text="Button", command=function)
x = 3
def function():
x -=1
if x == 0:
b.configure(state=DISABLED)
这会在按三下后禁用我的按钮。但是,我的问题稍微复杂一些。我想要一个可以根据变量来回切换的按钮,而不仅仅是一次从一个切换到另一个。在我的真实情况下,所有变量都是 IntVar
或 StringVar
.
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,则按钮应再次禁用自身。这是怎么做到的?
你可以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()
通常,这并不难。我通常可以毫不费力地做到这一点。例如:
b = Button(main, text="Button", command=function)
x = 3
def function():
x -=1
if x == 0:
b.configure(state=DISABLED)
这会在按三下后禁用我的按钮。但是,我的问题稍微复杂一些。我想要一个可以根据变量来回切换的按钮,而不仅仅是一次从一个切换到另一个。在我的真实情况下,所有变量都是 IntVar
或 StringVar
.
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,则按钮应再次禁用自身。这是怎么做到的?
你可以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()