减少menu.add\u命令()杂乱/重复行

2024-10-02 10:23:28 发布

您现在位置:Python中文网/ 问答频道 /正文

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

editmenu.add_command(label="Cut",state="disabled")
editmenu.add_command(label="Copy",state="disabled")
editmenu.add_command(label="Paste",state="disabled")
editmenu.add_command(label="Delete",state="disabled")

实际上,如果可能的话,只需要一行。我的菜单在我的程序中占用了相当大的空间,我想减少混乱。再加上我的程序员看到了一堆类似的行,觉得一定有办法减少它们。你知道吗

我尝试了下面的代码,但没有结果;我显然得到了一个nameberror,因为没有定义label和state。。。你知道吗

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

提前感谢您的建议!你知道吗


Tags: 代码命令add示例菜单deletelabelcommand
1条回答
网友
1楼 · 发布于 2024-10-02 10:23:28

以下是你想做的事情的翻译:

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'}将不起作用,因为它尝试使用变量的值作为键,但是没有这样的变量。你知道吗

第二个是不能使用+运算符合并词典。不幸的是,它不起作用。然而,有一个update method会使它所调用的dict发生变异。因为它不返回一个合并的dict,所以不能像您使用+那样内联使用它。你知道吗

第三个问题是传递dict与传递关键字参数不同。foo(bar='baz')foo({'bar':'baz'})不同,但它与foo(**{'bar':'baz'})相同。函数中的**语法将"unpacks"字典调用为关键字参数。你知道吗

不管怎样,这是一种奇怪的风格。下面是我要做的:

for label in ['Cut', 'Copy', 'Paste', 'Delete']:
    editmenu.add_command(label=label, state='disabled')

相关问题 更多 >

    热门问题