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

标签 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,则按钮应再次禁用自身。这是怎么做到的?

最佳答案

您可以跟踪一个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()

关于python - 如果满足某些条件,如何配置 Tkinter 小部件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28317799/

相关文章:

python - 使用 Selenium 单击特定的隐藏按钮(多个具有相同的名称),但我可以匹配按钮所在的特定表

python - 获取行匹配条件的 Pandas DataFrame 中的第一列值

python - 使用与 Jupyter Notebook 相同的样式将 Pandas 数据框渲染为 HTML

python - 读取 csv 文件的状态栏

python - 尝试多处理时无法 pickle 本地对象

python - 如何找到不在列表中的非空项的索引?

timer - 如何在 tkinter 中给定时间后运行函数?

python - Tkinter 破坏 Toplevel 并产生另一个错误

python - Tkinter,如果列表修改则实时更新小部件

python - Tkinter:所有单选按钮都被选中