【问题标题】:Selecting one checkbox deselects other options in tkinter选择一个复选框会取消选择 tkinter 中的其他选项
【发布时间】:2020-05-23 03:22:51
【问题描述】:

我有一个带有紫外线、绿色和蓝色的 LED 面板。试图弄清楚一旦我单击“无灯”(选项 4),它将如何禁用或取消选择前三个复选按钮(紫外线、绿色、蓝色)?我在这里看到了不同的选择:

https://www.tutorialspoint.com/python/tk_checkbutton.htm

但我不知道如何连接它们。任何想法都会有帮助,因为我对 Python/编码还很陌生。欣赏任何见解。谢谢!

checkvar1 = tk.IntVar()
checkvar2 = tk.IntVar()
checkvar3 = tk.IntVar()
checkvar4 = tk.IntVar()

c1 = tk.Checkbutton(leftframeobjcol, text="UV", variable = checkvar1)
c1.pack(anchor="w")
c2 = tk.Checkbutton(leftframeobjcol, text="Green", variable = checkvar2)
c2.pack(anchor="w")
c3 = tk.Checkbutton(leftframeobjcol, text="Blue", variable = checkvar3)
c3.pack(anchor="w")
c4 = tk.Checkbutton(leftframeobjcol, text="No light", variable = checkvar4)
c4.pack(anchor="w")

【问题讨论】:

    标签: python select tkinter deselect


    【解决方案1】:

    您可以使用command 选项为四个Checkbutton 分配回调,并在回调中,根据回调的传递值和当前状态重置其他三个检查按钮或重置No light 检查按钮检查按钮:

    def reset(flag=False):
      if flag:
        # 'No light' clicked
        if checkvar4.get():
          checkvar1.set(0)
          checkvar2.set(0)
          checkvar3.set(0)
      else:
        # other light clicked, reset 'No light' if any one of the others is checked
        checkvar4.set(0 if checkvar1.get() or checkvar2.get() or checkvar3.get() else 1)
    
    
    c1 = tk.Checkbutton(leftframeobjcol, text="UV", variable=checkvar1, command=reset)
    c1.pack(anchor="w")
    c2 = tk.Checkbutton(leftframeobjcol, text="Green", variable=checkvar2, command=reset)
    c2.pack(anchor="w")
    c3 = tk.Checkbutton(leftframeobjcol, text="Blue", variable=checkvar3, command=reset)
    c3.pack(anchor="w")
    c4 = tk.Checkbutton(leftframeobjcol, text="No light", variable = checkvar4, command=lambda:reset(True))
    c4.pack(anchor="w")
    

    【讨论】:

    • 我将参数的默认值更改为flag=False,那么您只需要使用lambda 来指定最后一个Checkbuttoncommand。换句话说,在大多数情况下,将默认值设为您希望的值。
    猜你喜欢
    • 1970-01-01
    • 2020-10-02
    • 2017-08-13
    • 2018-12-19
    • 1970-01-01
    • 2020-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多