Как добавить новые параметры, а затем прочитать новый выбранный параметр в python tkinter optionMenu? - PullRequest
0 голосов
/ 07 ноября 2019

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

При добавлении нового параметра он нарушает параметрMenu, и я больше не могу получить выбранный параметр. из варианта меню.

Я пытался просмотреть документацию tkinter (мало что смог найти), но не нашел информации, относящейся к моей проблеме.

import tkinter

category_list = ['Option A', 'Option B','Option C']

def add_To_List():
    entry = entry_Right.get()
    if entry not in category_list:
        option_Left_StringVar.set('')

        menu_left = option_Left["menu"]
        menu_left.delete(0, "end")
        category_list.append(entry)

        for choice in category_list:
            menu_left.add_command(label=choice, 
command=tkinter._setit(option_Left_StringVar, choice))

def option_Left_Function(selection):
    print(selection)

#----GUI----

root = tkinter.Tk()

frame_Left = tkinter.Frame(root)
frame_Left.grid(column=0, row=0, sticky='w')


option_Left_StringVar = tkinter.StringVar(frame_Left)
option_Left = tkinter.OptionMenu(frame_Left, option_Left_StringVar, 
*category_list, command=option_Left_Function)
option_Left.grid(column=0, row=0, sticky='w')


frame_Right = tkinter.Frame(root)
frame_Right.grid(column=1, row=0, sticky='e')

entry_Right = tkinter.Entry(frame_Right)
entry_Right.grid(column=1, row=0, sticky='w')

button_Right = tkinter.Button(frame_Right, text='Add to list', 
command=add_To_List)
button_Right.grid(column=2, row=0, sticky='w')

root.mainloop()

Самое дальнее, чем я смог прийти (как высм. в приведенном выше коде), было добавить новую опцию в optionMenu, но это не помогает, когда я не могу получить доступ к выбору optionMenu в коде.

Я был бы очень признателен за помощь в этомвопрос, спасибо.

1 Ответ

1 голос
/ 07 ноября 2019

Вы должны добавить option_Left_Function в качестве третьего аргумента

command=tkinter._setit(option_Left_StringVar, choice, option_Left_Function)

Используя print(tkinter.__file__), вы можете получить путь к исходному коду и увидеть это в этом файле.


Кстати: вам не нужно удалять старые элементы. Вы можете добавить только новый товар.

def add_To_List():
    entry = entry_Right.get()
    if entry not in category_list:
        option_Left_StringVar.set('')

        menu_left = option_Left["menu"]
        menu_left.add_command(label=entry, 
                  command=tkinter._setit(option_Left_StringVar, entry, option_Left_Function))

        category_list.append(entry)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...