变量更改时的 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')
...
我是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')
...