Получить выбранный элемент в списке и вызвать другую функцию, сохраняющую выбранный для него

У меня есть холст, который вызывает createCategoryMeny (x) при нажатии.

Эта функция просто создает окно Toplevel () ,

def createCategoryMenu(tableNumber):

    ##Not interesting below:
    categoryMenu = Toplevel()
    categoryMenu.title("Mesa numero: " + str(tableNumber))
    categoryMenu.geometry("400x400+100+100")

    categoryMenu.focus()
    categoryMenu.grab_set()

    Label(categoryMenu, text="Elegir categoria \n Mesa numero: " + str(tableNumber)).pack()


    ## RELEVANT CODE BELOW:
    listbox = Listbox(categoryMenu, width=50, height=len(info.listaCategorias))
    listbox.pack(pady=20)

    for item in info.listaCategorias:
        listbox.insert(END, item)

    listbox.selection_set(first=0)

    ##My attempt to solve it
    callback = lambda event, tag= "ThisShouldBeTheSelected!!": do(event, tag)
    listbox.bind("", callback)

Затем функция do:

def do(event, tag):
    print tag

Это успешно печатает `" ThisShouldBeTheSelected !! "` `.

И вот здесь я совершенно застрял.

Я не могу получить элемент, по которому дважды щелкнули мышью (выбранный).

Я хочу передать его как tag = .

Я пробовал:

listbox.curselection()

Что всегда печатает ('0',)

Если я удалю listbox.selection_set (first = 0) , я получу только следующее: ()

Таким образом, возникают следующие вопросы:

  • Как я могу получить выбранный элемент (тот, который был дважды нажат)
  • (Не так важно) Разумно ли передать его другой функции, как это делаю я?

Примечание:

Я нашел это :

8.5. Почему нет.listbox curselection или selection вернуть правильный элемент , когда я привязываю кнопку к своему списку?

Лучший способ получить выбранный элемент во время события нажатия кнопки в списке - это используйте следующий код:

bind .listbox {set item [% W get [% W ближайший% y]]}

Это гарантирует, что элемент под указателем будет возвращен как элемент . Причина, по которой curselection .listbox может завершиться неудачно, заключается в том, что элементы в curselection не устанавливаются до тех пор, пока не сработает привязка класса Listbox , который по умолчанию находится после привязок экземпляра. Это та же причина, по которой get selection может завершиться неудачно, но он также завершится ошибкой, если вы установите для параметра -exportselection значение 0.

Я не уверен, что это полезно, я не совсем понимаю, что он говорит.

5
задан Benjamin 24 July 2014 в 23:27
поделиться