I know lambda
is use when calling anonymous functions like:
double = lambda x: x * 2
However, I don't quite understand why do I have to use lambda
when binding a function to a QAction
object in the following scenario:
class UiMainWindow(object):
def setupUi(self, mainwindows):
mainwindows.setObjectName("MainWindow")
self.menubar = QtWidgets.QMenuBar(mainwindows)
self.menubar.setGeometry(QtCore.QRect(0, 0, 484, 21))
self.menubar.setObjectName("menubar")
self.menuFile = QtWidgets.QMenu(self.menubar)
self.menuFile.setObjectName("menuFile")
mainwindows.setMenuBar(self.menubar)
self.actionOpen = QtWidgets.QAction(mainwindows)
self.actionOpen.triggered.connect(lambda:self.test())
self.menuFile.addAction(self.actionOpen)
self.menubar.addAction(self.menuFile.menuAction())
self.retranslateUi(mainwindows)
QtCore.QMetaObject.connectSlotsByName(mainwindows)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.menuFile.setTitle(_translate("MainWindow", "File"))
self.actionOpen.setText(_translate("MainWindow", "Open..."))
def test(self):
win32api.MessageBox(0, 'hello', 'title')