#python #python-3.x #tkinter
#питон #python-3.x #tkinter
Вопрос:
попытка получить выбранные значения из списка кнопок проверки без необходимости создавать 10 или более кнопок проверки и var.
я получил это, чтобы проверить идею
from tkinter import Tk, StringVar, Checkbutton, Button, BooleanVar root = Tk() w, h = root.winfo_screenwidth(), root.winfo_screenheight() root.geometry("%dx%d 0 0" % (w, h)) def def1(): print("1") def def2(): print("2") def def3(): print("3") def def4(): print("4") def def5(): print("5") def def6(): print("6") def letssee(): print(addlist) nomtestes = ["def1", "def2", "def3", "def4", "def5", "def6"] clltes = 0 rwwtes = 0 addlist=[] username_cbs = dict() for name in nomtestes: if clltes == 5: rwwtes = 1 clltes = 0 username_cbs[name] = Checkbutton(root, text=name, onvalue=True, offvalue=False) username_cbs[name].var = BooleanVar() username_cbs[name]['variable'] = username_cbs[name].var username_cbs[name]['command'] = lambda w=username_cbs[name]: upon_select(w) username_cbs[name].grid(row=rwwtes, column=clltes, pady=2) clltes = 1 Button(root, text="OK",command=letssee).grid(column=0, row=5, padx=1, pady=15) def upon_select(widget): if widget.var.get() == True: addlist.append(widget['text']) else: addlist.remove(widget['text']) root.mainloop()
В этом примере я пытаюсь распечатать все кнопки, которые я выбрал, но для запуска функций, добавленных в список дополнений
Есть идеи, как это сделать?
Спасибо
Комментарии:
1. Можете ли вы свести вопрос к соответствующей части? Необходимо ли нам видеть ваш графический код и говорить о кнопках проверки или вопрос просто в том, как вызывать функции из списка?
2. мне просто нужно знать, как вызвать функцию в списке дополнений
Ответ №1:
Вы можете создать словарь, сопоставив строковые значения соответствующим функциям, а затем добавить или удалить их в список. Вы можете добавить карту функций и изменить letssee()
ее, чтобы проверить.
func_map = {"def1": def1, "def2": def2, "def3": def3, "def4": def4, "def5": def5, "def6": def6} nomtestes = ["def1", "def2", "def3", "def4", "def5", "def6"]
def letssee(): print(addlist) for i in addlist: func_map[i]()
Out:['def2', 'def1'] 2 1
Комментарии:
1. Мне нужно вызвать функцию в списке
2. ваш пример приводит меня к ошибке, что объект ‘str’ не может быть вызван
3. обновленный ответ.