Вопрос был опубликован:
Хотелось бы узнать в функции hello, кто сгенерировал обратный вызов.
Можно ли указать параметр, который можно передать?
После небольшого исследования я выяснил, как для моей функции узнать, кто ее вызвал. Это был хитрый код, чем я ожидал.
Используемая строка кода:
top_menu.add_command(label=sub_menu_info, command=lambda: Menu.MenuItemChosenCallback(element, sub_menu_info))
Я раньше не использовал лямбду, так что синтаксис меня выбрасывал. У меня есть метод в моем классе «Меню» с именем MeduItemChosenCallback. Он объявлен так:
def MenuItemChosenCallback (self, item_chosen):
Я не осознавал, что мне нужно поместить имя класса в функцию в лямбда-выражении. Я думал, что это будет element.MenuItemChosenCallback
, поскольку эта переменная является объектом Menu. Опять же, раньше не использовали лямбду, поэтому нужно было проработать синтаксис.
Используя исходный код примера, определение, кто совершил вызов hello
, было выполнено с параметром:
from tkinter import *
root = Tk()
def hello(parm):
print (parm)
# create a toplevel menu
menubar = Menu(root)
menubar.add_command(label="Hello!", command= lambda: hello('1'))
menubar.add_command(label="Quit!", command=lambda: hello('2'))
# display the menu
root.config(menu=menubar)
mainloop()