0

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

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 中的最后一个方法。看起来lambda效果并不好。

有什么解决办法吗?

4

0 回答 0