Насколько я понимаю, проблема в том, что вам нужно написать несколько таких функций:
def allAlpha():
for eachVar in alphaCbVars:
eachVar.set(allAlphaVar.get())
def allBravo():
for eachVar in bravoCbVars:
eachVar.set(allBravoVar.get())
… и т. Д.
Вам нужна функция, которая принимает список переменных и all-var в качестве параметров:
def allGroup(listOfVars, groupVar):
for eachVar in listOfVars:
eachVar.set(groupVar.get())
И теперь вы можете использовать partial
для создания всех отдельных частичных функций:
from functools import partial
allAlphaCb = tk.Checkbutton(root, text='Alpha', variable=allAlphaCbVar,
command=partial(allGroup, alphaCbVars, allAlphaVar)
allBetaCb = tk.Checkbutton(root, text='Beta', variable=allBetaCbVar,
command=partial(allGroup, betaCbVars, allBetaVar)
Однако вы можете еще больше уменьшить дублирование, написав функцию, которая выполняет всю работу по созданию группы в одном месте. Трудно показать это без использования вашего кода, но это будет выглядеть примерно так:
def makeGroup(name): # maybe some more params needed for the individual cbs
allCbVars = []
allCbs = []
# some loop that generates the individual variables and checkboxes
# and puts them in those lists
cbVar = tk.IntVar()
cb = tk.Checkbutton(root, text=name, variable=cbVar,
command=partial(allGroup, allCbVars)
return allCbVars, allCbs, cbVar, cb
alphaCbVars, alphaCbs, allAlphaVar, allAlphaCb = makeGroup('Alpha')
Или, в качестве альтернативы, может быть, просто функция для группировки нескольких cbs:
def groupify(name, cbVars):
cbVar = tk.IntVar()
cb = tk.Checkbutton(root, text=name, variable=cbVar,
command=partial(allGroup, cbVars)
return cbVar, cb
# now build all your individual alpha cbs the same as in your current code
alphaCbVar, alphaCb = groupify('Alpha', alphaCbVars)
А может быть, вы даже не хотите хранить alphaCbVars
, betaCbVars
и т. Д. Как отдельные переменные. Может быть, более разумно иметь список групп, или точное наложение имен на группы, или какой-то объект с атрибутами, или ... что угодно.