Установка одного флажка отменяет выбор других параметров в tkinter - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть светодиодная панель с ультрафиолетом, зеленым и синим. Попытка выяснить, как один раз, когда я нажму «Нет света» (вариант 4), как он отключит или отменит выбор первых трех кнопок (ультрафиолетовый, зеленый, синий)? Я видел различные варианты здесь:

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

, но я не знаю, как их соединить. Любые мысли действительно помогут, так как я довольно плохо знаком с Python / Coding. Цените любые идеи. Спасибо!

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")

1 Ответ

1 голос
/ 07 февраля 2020

Вы можете назначить обратный вызов, используя опцию 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")
...