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



我正在使用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.set.ssting [i] [1]"保存到变量"设置"。对不起,我的新手问题。

尚不完全清楚您要实现的目标,但是有几种API可以帮助您。当然,当然不需要像目前那样使用丑陋的exec电话。

这里有一些想法:

  1. 使用QAction.setData()将某些数据与每个动作相关联:

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

        action = self.loadMenu.actions()[2]
        print((action.text(), action.data()))
    
  3. 将插槽连接到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))
    

ps:

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

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

相关内容

  • 没有找到相关文章

最新更新