通过按下具有不同输入值的按钮来动态调用功能

时间:2018-08-17 20:59:15

标签: python pyqt4 dynamic-programming qtoolbar action-button

我有一个带工具栏的主窗口。我也有一个处理动作的类和一个包含所有动作的类。这是我的代码:

import sys
from PyQt4 import QtGui, QtCore


buttonActions = ['actA', 'actB', 'actC']
img = '../../Images/logo.png'
tip = 'home'

class HandlerClass:

    def __init__(self):
        pass

    def loadAction(self, act, win):
        uiAct = ActionsClass()
        func = getattr(uiAct, act)
        func(win)

class ActionsClass:

    def __init__(self):
        pass

    def actA(self, win):
        print 'I am actA'

    def actB(self, win):
        print 'I am actB'

    def actC(self, win):
        print 'I am actC'


class TestWindow(object):
    '''
    classdocs
    '''
    def __init__(self):
        '''
        Constructor
        '''

        self.app = QtGui.QApplication(sys.argv)
        self.thisWin = QtGui.QMainWindow()

        self.buildButtons()

        self.thisWin.show()
        sys.exit(self.app.exec_())

    def buildButtons(self):

        thisBar = self.thisWin.addToolBar('Basic')        

        for i in range(0, len(buttonActions)):
            toolAct = QtGui.QAction(buttonActions[i], self.thisWin)
            toolAct.triggered.connect(lambda: actHandler.loadAction(buttonActions[i], self.thisWin))
            thisBar.addAction(toolAct)

if __name__ == '__main__':

    actHandler = HandlerClass()

    TestWindow()

如您所见,问题在于无论我在工具栏上按下什么按钮,总是执行ActionClass中的最后一个Method。似乎lambda不能很好地工作。

有什么解决办法吗?

0 个答案:

没有答案