如何禁用关联同一Tkinter变量的一组单选按钮?
解决方案
没办法通过item_choice直接禁用所有单选按钮——这个变量只是用来存储选中值的绑定变量,和按钮实例本身没有关联,没法通过它控制按钮的启用/禁用状态。
你之前用button.config(state=DISABLED)无效,是因为循环里的button变量每次迭代都会被新的按钮实例覆盖,最后它只指向最后一个创建的按钮,所以只能修改那一个的状态。
正确的做法:存下所有按钮实例
创建按钮的时候,把每个按钮都添加到一个列表里,之后遍历这个列表就能批量禁用所有按钮:
# 先定义一个空列表存按钮实例 radio_buttons = [] modes = [('Item A',20),('Item B',100),('Item C',180),('Item D',280)] for item in modes: button = Radiobutton(picker, text=item[0], variable=item_choice, value=item[0], command=select_item) button.place(x = item[1], y = 180) radio_buttons.append(button) # 将按钮添加到列表中
需要禁用的时候,遍历列表修改每个按钮的状态:
for btn in radio_buttons: btn.config(state=DISABLED)
备选方法:通过父组件查找子按钮(不推荐)
如果实在不想维护列表,可以通过父组件picker的子组件列表来筛选出所有Radiobutton,但这种方式容易误操作(比如父组件里有其他无关的Radiobutton时):
from tkinter import Radiobutton for child in picker.winfo_children(): if isinstance(child, Radiobutton): child.config(state=DISABLED)
内容的提问来源于stack exchange,提问作者pixxelate
相关产品推荐
相关产品推荐

