Я пытаюсь добавить несколько нумерованных команд в меню Tkinter, используя цикл for. При вызове команды его номер должен использоваться как аргумент функции команды. Следующий код не работает, потому что i вычисляется при вызове команды, которая после завершения цикла. Это означает, что аргумент, переданный функции1, всегда равен 15, тогда как я должен передать номер, который отображается на ярлыке команды. Есть ли способ сделать это?Как использовать переменную цикла в выражении лямбда
Примечание: Маркировка работает как задумано, производя 16 вариантов маркированы от 0 до 15
newMenu = Menu(menuButtonInstance)
for i in range(16):
newMenu.add_command(label = '%s'%i,
command = lambda:function1(i))
menuButtonInstance.config(menu = newMenu)
Заранее спасибо
+1 для трюка лямбда-с-умолчанию-аргумента –
Большое спасибо за хороший ответ – Petter
Параметр 'partial' подход намного лучше ИМХО. По умолчанию аргумент аргумента - это изворотливый хак, который оставляет ошибочное впечатление, что аргумент по умолчанию предназначен для замены. –