Python 如何根据文件创建QAction及其信号

Python 如何根据文件创建QAction及其信号,python,python-3.x,pyqt4,qmenu,qaction,Python,Python 3.x,Pyqt4,Qmenu,Qaction,我正在使用python3和PyQt4。我想创建一个包含动作的菜单,动作的数量因数组而异。我希望它们中的每一个都将保存在数组中的相应信息保存到一个变量中。创建数量可变的事件似乎是不可能的。那么,我怎样才能创建一个根据它被激活的动作执行不同工作的事件呢? 这是我的代码: def buildLoadSettings(self): self.settings = array for i in range(len(self.settings)): exec("self.se

我正在使用python3和PyQt4。我想创建一个包含动作的菜单,动作的数量因数组而异。我希望它们中的每一个都将保存在数组中的相应信息保存到一个变量中。创建数量可变的事件似乎是不可能的。那么,我怎样才能创建一个根据它被激活的动作执行不同工作的事件呢? 这是我的代码:

def buildLoadSettings(self):
    self.settings = array
    for i in range(len(self.settings)):
        exec("self.settings" + str(i) + " = QtGui.QAction('" + self.settings[i][0] + "', self)")
        exec("self.loadMenu.addAction(self.settings" + str(i) + ")")
我想将每个操作与事件连接起来,最后将“self.settings[I][1]”保存到变量“settings”中。
很抱歉我的新手问题。

不完全清楚您想要实现什么,但是有几个API应该会有所帮助。当然没有必要像现在这样使用丑陋的
exec
调用

以下是一些想法:

  • 使用
    QAction.setData()
    将一些数据与每个操作关联:

        for item in self.settings:
            action = QtWidgets.QAction(item[0], self)
            action.setData(item[1])
            self.loadMenu.addAction(action)
    
  • 使用
    QMenu.actions()
    访问操作,而不是创建属性:

        action = self.loadMenu.actions()[2]
        print((action.text(), action.data()))
    
  • 将插槽连接到
    QMenu.triggered()
    以在一个位置处理其所有操作:

        self.loadMenu.triggered.connect(self.handleLoadMenu)
    
    def handleLoadMenu(self, action):
        # "action" is the action that was clicked
        text = action.text()
        data = action.data()
        print('Action Clicked: ("%s", %s)' % (text, data))
    
  • 附言:

    如果要动态获取/设置属性,请使用
    getattr
    setattr

        # self.settings2 = action
        setattr(self, "settings%s" % 2, action)
        # action = self.settings2
        action = getattr(self, "settings%s" % 2) 
    

    请解释你的问题,我只是想创建多个操作,具有可变的编号和一个事件,该事件知道调用它的操作,以便它使用相应的数据。Ekhumaro给出了精确的答案。