我有一个带工具栏的主窗口。我也有一个处理动作的类和一个包含所有动作的类。这是我的代码:
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
不能很好地工作。
有什么解决办法吗?