Возвращение аргумента из функции, вызываемой из командного метода Tkinter Python - PullRequest
0 голосов
/ 10 июня 2018

Я пытаюсь получить значения из функции, когда нажимаю на строку меню, но я не знаю, как это сделать:

Допустим, у меня есть следующая функция:

def other1():
    return 10
def other2(a):
    print(a)
Insert = Menu(menubar, tearoff=0)
x=Insert.add_command(label="InsertA1", command=other1)
Insert.add_command(label="InsertA2", command=other2(x))

И когда я попытался нажать на строку меню InsertA2, мне просто дали значения «Нет» ... Любая помощь?

1 Ответ

0 голосов
/ 11 июня 2018

Menu.add_command ничего не возвращает (по крайней мере, насколько мне известно), поэтому отчасти вы получаете None.

Когда вы делаете command=other2(x), это фактически не делает то, что вы ожидали, оно фактически делает command равным возвращаемому значению other2(x), так как вызовы функций оцениваются во время выполнения.Вы хотели сделать command=lambda x=x: other2(x).

Если вы делаете x=Insert.add_command(...), чтобы сохранить ссылку на команду, чтобы потом можно было ее редактировать, это не то, как вы это делаете.Вы можете настроить команду с помощью Menu.entryconfigure(index) и получить доступ к ее настройкам с помощью Menu.entrycget(index), тогда как индекс - это позиция / порядок, в который вы добавляете запись команды.http://tcl.tk/man/tcl8.5/TkCmd/menu.htm#M55.

...