从字典中填充wx.MenuItem并将所有MenuItem绑定到同一方法(传递字典值)?

问题描述 投票:0回答:1

使用Python 3.x和wxPython。

我正在使用一个GUI工具,随着时间的推移,它可能需要扩展和更新,并且我试图在增加功能时减少工作量(长期)。

我有一个需要将变量传递给它的方法,然后该方法检查字典以查看与之关联的“ ID”,然后使用该ID来触发一些自动化。

job_dictionary = {
    'job_name_in_english': 'id_goes_here',
    'job_name_in_english': 'id_goes_here'
}

我有一个非常简单的窗口设置,并使用以下命令填充文件菜单:

for key in job_dictionary:
    newitem = wx.MenuItem(file_menu,wx.ID_NEW, text = key,kind = wx.ITEM_NORMAL)
    file_menu.Append(newitem)

然后,我想将它们绑定到一个方法上,并根据他们从菜单中选择的项,将该方法传递给'key'值。

这是我遇到一些困难的地方。我想知道是否有一种方法可以根据字典中的键值动态绑定它们,因为一旦完成该部分,我就可以调用该方法并将其传递给键:

def job_trigger(key)
    id = job_dictionary[key]
    #Rest Of Code...

希望我正在尝试做的事情很有道理。我仍然对构建GUI应用程序还不陌生,这是我第一次处理文件菜单,也是我第一次尝试实现类似的东西。

我知道在批处理脚本中我可以执行以下操作:

set x=0
loop of some kind here(
set /A "x=x+1"
set menuItem%x%=foobar
)

这会使变量名动态化,然后我想在编写它们时可以绑定它们。所以我猜是这样的:

x = 0
for key in dictionary
     x += 1
     menu_item = 'menu_item_' + x
     'menu_item_' + x = wx.Menu().Append(wx.ID_FILEDLGG, key)
     'menu_item_' + x.Bind(wx.EVT_MENU, self.job_trigger(key), key)

我知道这不是像这样的正确语法,我不知道这是否是处理这种情况的适当方法,或者是否还有其他我应该尝试的东西。

python python-3.x dictionary variables wxpython
1个回答
0
投票

根据我的推论,您可能只需要对dict进行简单的迭代:

#! /usr/bin/env python3

a_dict = {
    "key_0": "value_0",
    "key_1": "value_1"
}

for i, v in enumerate(a_dict):
    print("current index: {}".format(i))
    print("current value: {}".format(v))

    # string manipulation
    builder_string = "prefix_" + str(i)
    print(builder_string)

    # rest of code...
© www.soinside.com 2019 - 2024. All rights reserved.