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