Вот перевод того, что вы хотели сделать:
for labeldic in [{"label":"Cut"},{"label":"Copy"},{"label":"Paste"},{"label":"Delete"}]:
labeldic.update({"state": "disabled"})
editmenu.add_command(**labeldic)
Были три проблемы, которые я исправил.
Во-первых, ключи словаря должны быть заключены в кавычки, если они являются строками.Если вы хотите, чтобы dict отображал строку 'label'
в строку 'cut'
, вы можете сделать это, используя литерал dict {'label': 'cut'}
или, возможно, конструктор dict()
, который расширяет аргументы ключевых слов таким образом:,Как вы обнаружили, {label: 'cut'}
не будет работать, потому что он пытается использовать значение переменной для ключа, но такой переменной нет.
Во-вторых, вы не можете объединить словари с помощью +оператор.Это не работает, к сожалению.Тем не менее, существует метод обновления , который изменяет код, по которому он вызывается.Так как он не возвращает объединенный dict, он не может использоваться внутри строки так же, как вы использовали +.
Третья проблема заключается в том, что передача dict отличается от передачи аргументов ключевого слова.foo(bar='baz')
- это не то же самое, что foo({'bar':'baz'})
, но - это и foo(**{'bar':'baz'})
.Синтаксис **
в вызове функции "распаковывает" словарь в аргументы ключевых слов.
Независимо от того, что это странный стиль.Вот что я бы сделал вместо этого:
for label in ['Cut', 'Copy', 'Paste', 'Delete']:
editmenu.add_command(label=label, state='disabled')