Я использовал класс, представленный в этом https://stackoverflow.com/a/50399359/10343540 сообщении, но я метод getCheckedItems () всегда возвращает все элементы в списке, а не только отмеченные. Код ниже:
import tkinter as tk
class ChecklistBox(tk.Frame):
def __init__(self, parent, choices, **kwargs):
tk.Frame.__init__(self, parent, **kwargs)
self.vars = []
bg = self.cget("background")
for choice in choices:
var = tk.StringVar(value=choice)
self.vars.append(var)
cb = tk.Checkbutton(self, var=var, text=choice,
onvalue=choice, offvalue="",
anchor="w", width=20, background=bg,
relief="flat", highlightthickness=0
)
cb.pack(side="top", fill="x", anchor="w")
def getCheckedItems(self):
values = []
for var in self.vars:
value = var.get()
if value:
values.append(value)
return values
top = tk.Tk()
col_list = ['ROI', 'YoY', 'Other']
checklist = ChecklistBox(top, col_list, bd=1, relief="sunken", background="white")
checklist.pack()
def command() :
print(checklist.getCheckedItems())
tk.Button(top, text="Choose Columns", command=command).pack()
top.mainloop()