【问题标题】:Python, Tkinter - Enable/Disable buttons only when a radio button is selectedPython,Tkinter - 仅在选择单选按钮时启用/禁用按钮
【发布时间】:2022-08-14 09:42:57
【问题描述】:

所以这里是我的代码

root = Tk()

# 1st frame
frame_1 = LabelFrame(root)
frame_1.pack()

#var
var = IntVar()
var.set(0)
test = [\'test1\', \'test2\', \'test3\', \'test4\']

# radio button
radio_1 = Radiobutton(frame_1, text = test[0], value = 1, variable = var)
radio_1.pack()
radio_2 = Radiobutton(frame_1, text = test[1], value = 2, variable = var)
radio_2.pack()
radio_3 = Radiobutton(frame_1, text = test[2], value = 3, variable = var)
radio_3.pack()

# 2nd frame
frame_2 = LabelFrame(root)
frame_2.pack()

# buttons
button_1 = Button(frame_2, text =  test[0], state = DISABLED)
button_1.pack()
button_2 = Button(frame_2, text =  test[1], state = DISABLED)
button_2.pack()
button_3 = Button(frame_2, text =  test[2], state = DISABLED)
button_3.pack()
button_4 = Button(frame_2, text =  test[3], state = DISABLED)
button_4.pack()

root.mainloop()

我试图做的是在选择单选按钮时启用按钮。 这是我尝试过的。

def changeState():
    if var.get() != 0:
       button_1[\'state\'] = NORMAL
       button_2[\'state\'] = NORMAL
       button_3[\'state\'] = NORMAL
       button_4[\'state\'] = NORMAL

changeState()

我相信这只是最初设置它,当我选择一个单选按钮或更改它时,它不会更新。我想我可以在按钮内使用命令,但不明白如何去做。

    标签: python tkinter button radio-button


    【解决方案1】:

    我添加了四个函数。然后在Radiobutton 中,我为每个Radiobuuton 添加了command=changeState

    尝试这个:

    from tkinter import *
    
    root = Tk()
    
    # 1st frame
    frame_1 = LabelFrame(root)
    frame_1.pack()
    
    #var
    var = IntVar()
    var.set(0)
    test = ['test1', 'test2', 'test3', 'test4']
    
    def changeState1():
        if var.get() !=0:
           button_1['state'] = NORMAL
           button_2['state'] = DISABLED
           button_3['state'] = DISABLED
           button_4['state'] = DISABLED
    
    def changeState2():
        if var.get() !=0:
           button_1['state'] = DISABLED
           button_2['state'] = NORMAL
           button_3['state'] = DISABLED
           button_4['state'] = DISABLED       
    
    
    def changeState3():
        if var.get() !=0:
           button_1['state'] = DISABLED
           button_2['state'] = DISABLED
           button_3['state'] = NORMAL
           button_4['state'] = DISABLED
    
    def changeState4():
        if var.get() !=0:
           button_1['state'] = DISABLED
           button_2['state'] = DISABLED
           button_3['state'] = DISABLED
           button_4['state'] = NORMAL      
           
    # radio button
    radio_1 = Radiobutton(frame_1, text = test[0], value = 1,command=changeState1, variable = var)
    radio_1.pack()
    radio_2 = Radiobutton(frame_1, text = test[1], value = 2, command=changeState2, variable = var)
    radio_2.pack()
    radio_3 = Radiobutton(frame_1, text = test[2], value = 3,command=changeState3, variable = var)
    radio_3.pack()
    radio_4= Radiobutton(frame_1, text = test[2], value = 3,command=changeState4, variable = var)
    radio_4.pack()
    
    # 2nd frame
    frame_2 = LabelFrame(root)
    frame_2.pack()
    
    # buttons
    button_1 = Button(frame_2, text =  test[0],  state = DISABLED)
    button_1.pack()
    button_2 = Button(frame_2, text =  test[1], state = DISABLED)
    button_2.pack()
    button_3 = Button(frame_2, text =  test[2], state = DISABLED)
    button_3.pack()
    button_4 = Button(frame_2, text =  test[3], state = DISABLED)
    button_4.pack()
      
    root.mainloop()
    changeState()
    

    【讨论】:

    • 谢谢,我从查看您的代码中发现我做错了什么。我在命令中的函数名称后面有括号,虽然它没有给我任何错误,但它无法实现我想要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-30
    • 2021-09-29
    • 2012-03-13
    • 2016-09-11
    • 1970-01-01
    相关资源
    最近更新 更多