Редактирование и захват новой опции из optionMenu Tkinter - PullRequest
1 голос
/ 04 апреля 2020

Я создал список optionMenus через для l oop. Мне нужно t ie от моего выбора optionMenu до опции option, из которой он получен. Я думаю, что for l oop делает это так, что я не могу собрать вместе ie два значения.

def get_selection(choice):
    popUp_list.append(choice)

if num >= 1 and num <5:
    for num in range(1,5):
        choice = StringVar(root2)
        choices = {'Application', 'File', 'Website'}
        choice.set('Choose Type')

        popUpMenu = OptionMenu(root2, choice, *choices, command = Controller.get_selection)
        popUpMenu.grid(row=num, column=0)

Я знаю, что было бы проще жестко закодировать опцию меню, но по причинам, в которые я не хочу входить, необходим для l oop. Не специально для этой части, а для другой части моего кода. Здесь проще использовать этот пример.

Когда в меню выбран вариант, я могу получить значения, и это прекрасно работает. Однако, если пользователь делает первый выбор, а затем хочет обновить свой выбор, у меня нет возможности это зафиксировать. Создает «новый» выбор, не привязанный к опции Menu. Таким образом, новая опция не заменяет старой опции. Он просто создает новый выбор.

Есть ли способ передать число popUpMenu через функцию Controller .get_selection? При попытке передать другую переменную, выполняющую что-то в строках:

def get_selection(choice, num):
    popUp_list.append(choice)
    print(num)
popUpMenu = OptionMenu(root2, choice, *choices, command = lambda: Controller.get_selection(choice, num))

Я получаю сообщение об ошибке ниже и не могу выбрать опцию. Я не уверен, что поставить в качестве первого значения. Выбор ввода не работает.

self .__ callback (self .__ value, * args) TypeError: () принимает 0 позиционных аргументов, но 1 было дано

1 Ответ

0 голосов
/ 12 апреля 2020

Я смог решить это. Я обновил свой код до:

    if num >= 1 and num <5:
        for num in range(1,5):
            choice = StringVar(root2)
            choices = {'Application', 'File', 'Website'}
            choice.set('Choose Type')


            popUpMenu = OptionMenu(root2, choice, *choices, command = lambda choice = choice, num = num: (Controller.get_selection(choice, num)))

Итак, сделав ваш оператор команды следующим образом: command = lambda choice = choice, num = num: (Controller.get_selection (choice, num)))

позволяет передавать переменные в вашу функцию.

...