0

我有一个带紫外线、绿色和蓝色的 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")
4

1 回答 1

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")
于 2020-02-07T01:43:42.697 回答