变量更改时的 tkinter 单选按钮事件

tkinter radiobutton event when variable change

我是tkinter的初学者,遇到了麻烦。 我想要一个单选按钮组,它可以启用或禁用某些按钮、刻度……,其中单选按钮的功能是 selected。这些按钮组连接到一个变量。对于 disable/enable 个小部件,我使用按钮组命令。单击单选按钮时一切正常。但是如果变量改变了,单选按钮没有调用单选命令就改变了,所以其他小部件没有更新。

这是我想做的非常简单的代码

from tkinter import ttk
import tkinter as tk

root = tk.Tk()

frame = ttk.LabelFrame(root, text='choice your futur')
frame.pack(fill="both", expand="yes", padx=5, pady=5)

selection = tk.IntVar()

def onButtonClic():
    selection.set(1)

bt = tk.Button(frame, text='continue', command=onButtonClic)
bt.grid(column=0, row=1, columnspan=2, sticky='ew')


def onRadioButtonChange():
    if selection.get() != 0:
        bt.configure(state = tk.DISABLED)
    else:
        bt.configure(state = tk.NORMAL)

tk.Radiobutton(frame, command=onRadioButtonChange, text = "blue pill", variable = selection, value = 0).grid(column=0, row=0, sticky='nw')
tk.Radiobutton(frame, command=onRadioButtonChange, text = "red pill", variable = selection, value = 1).grid(column=1, row=0, sticky='nw')

root.mainloop()

如果我 select 红色药丸,按钮将被禁用。当蓝色药丸被 selected 并点击按钮(将单选变量设置为 1:红色药丸值)时,红色药丸被 selected,但按钮仍然可用。 我想当变量改变时,然后调用无线电命令。

此致 JM

您可以使用 tkinter 变量 .trace_add() 函数代替:

...

def onRadioButtonChange(*args):
    if selection.get() != 0:
        bt.configure(state = tk.DISABLED)
    else:
        bt.configure(state = tk.NORMAL)

# call onRadioButtonChange() when the variable is updated
selection.trace_add('write', onRadioButtonChange)

tk.Radiobutton(frame, text = "blue pill", variable = selection, value = 0).grid(column=0, row=0, sticky='nw')
tk.Radiobutton(frame, text = "red pill", variable = selection, value = 1).grid(column=1, row=0, sticky='nw')

...