Python 减少菜单。添加命令()混乱/重复行

Python 减少菜单。添加命令()混乱/重复行,python,syntax,widget,tkinter,Python,Syntax,Widget,Tkinter,我想做以下工作(只是一个示例,实际代码有更多的菜单和更多的add_命令): 但事实上,如果可能的话,就少用一行。我的菜单在我的程序中占据了相当大的空间,我希望减少混乱。另外,我身上的程序员看到了一堆类似的行,觉得一定有办法减少它们 我尝试了以下代码,但没有成功;我显然有一个名称错误,因为标签和状态没有定义 for labeldic in [{label:"Cut"},{label:"Copy"},{label:"Paste"},{label:"Delete"}]: editmenu.add_co

我想做以下工作(只是一个示例,实际代码有更多的菜单和更多的add_命令):

但事实上,如果可能的话,就少用一行。我的菜单在我的程序中占据了相当大的空间,我希望减少混乱。另外,我身上的程序员看到了一堆类似的行,觉得一定有办法减少它们

我尝试了以下代码,但没有成功;我显然有一个名称错误,因为标签和状态没有定义

for labeldic in [{label:"Cut"},{label:"Copy"},{label:"Paste"},{label:"Delete"}]: editmenu.add_command(labeldic+{state:"disabled"})

提前感谢您的建议

以下是您想要做的翻译:

for labeldic in [{"label":"Cut"},{"label":"Copy"},{"label":"Paste"},{"label":"Delete"}]:
    labeldic.update({"state": "disabled"})
    editmenu.add_command(**labeldic)
我解决了三个问题

首先,如果字典键是字符串,则需要引用它们。如果您希望dict将字符串
'label'
映射到字符串
'cut'
,您可以使用dict literal
{'label':'cut'}
,或者可能使用
dict()
构造函数,该构造函数将关键字参数展开为:
dict(label='cut')
。正如您所发现的,
{label:'cut'}
不起作用,因为它试图使用变量的值作为键,但没有这样的变量

第二个问题是不能使用+运算符合并词典。不幸的是,它不起作用。然而,有一种基因变异了它所调用的dict。因为它不返回合并的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')

+1关于替代建议。“labeldic”解决方案既丑陋又难懂——完全否定了“消除混乱”所获得的任何东西。除性能最敏感的情况外,应始终努力使代码尽可能可读。
for label in ['Cut', 'Copy', 'Paste', 'Delete']:
    editmenu.add_command(label=label, state='disabled')