禁用Python和Tk中的按钮

时间:2016-04-01 15:11:54

标签: python tkinter tk

学习小组,

我正在开发一个带有一排Radiobutton的gui,必须在模式" auto"中禁用。

脚本的一部分:

#  define Auto Manual Mode: 
def AM_procedure():
    global manual
    if vam.get()==1:
        am_mode.set("Auto")
        manual = False 
        for txt,val in space:
            space_button=Radiobutton(root, text = txt, value=val)
            space_button.configure(state = 'disabled')
    else:
        am_mode.set("Manual")
        manual = True
        for txt,val in space:
            space_button=Radiobutton(root, text = txt, value=val)
            space_button.configure(state='normal')
    print manual
    return;

...剪断 按钮:

for txt,val in space:
    space_button=Radiobutton(root, text = txt, font=fnt, indicatoron=0, width=8, variable=v, command=ShowChoice,value=val)
    space_button.grid(row=8, column=val-1)

for txt,val in AM:
    am_button=Radiobutton(root, text = txt, font=fnt, indicatoron=0, width=8, variable=vam, command=AM_procedure, value=val)
    am_button.grid(row=9, column=val+1)

空间包含5个元组,AM 2。除其他外,按下自动按钮会使第一行变灰。我尝试了几件事,但我只设置了灰色的最后一个按钮。但是这个脚本没有任何效果。 请指教。 提前致谢, HARKE

1 个答案:

答案 0 :(得分:1)

创建这样的小部件的问题:

for i in range(10):
    button=Button(root, text = i)
    button.grid(column=i)

一旦for循环结束,没有简单的方法来访问创建的按钮,仍然有一个变量button,它将指向最后创建的小部件,你可以使用{{1获取root的每个子节点并配置所有子节点:

root.winfo_children()

但如果你在根窗口运行它,它将禁用程序中的所有内容。

您真正需要的是一种保持对您创建的所有按钮的引用的方法:

for w in root.winfo_children():
    w.configure(state="disabled")

然后,当您想要配置它们时,您可以使用:

space_buttons = [] #list of space buttons

...

for txt,val in space:
    space_button=Radiobutton(root, text = txt, font=fnt, indicatoron=0, width=8, variable=v, command=ShowChoice,value=val)
    space_button.grid(row=8, column=val-1)
    #add it to the list of space buttons
    space_buttons.append(space_button)

唯一可能的问题是,如果for button in space_buttons: button.configure(state="disabled") 列表在程序中的某个位置发生更改,在这种情况下,您需要一个函数来重新创建按钮:

space

可能是def create_space_buttons(): while space_buttons: #same as while len(space_buttons)>0: space_buttons.pop().destroy() #remove existing buttons for txt,val in space: space_button=Radiobutton(root, text = txt, font=fnt, indicatoron=0, width=8, variable=v, command=ShowChoice,value=val) space_button.grid(row=8, column=val-1) #add it to the list of space buttons space_buttons.append(space_button) 的类似功能。