参考博客:https://blog.51cto.com/9291927/2422187
Qt中信号发出的参数个数必须大于等于槽函数的参数个数,PyQt使用自定义参数传递解决槽函数参数比信号参数多的问题。使用Lambda表达式或functools的partial函数可以传递自定义参数给槽函数,自定义参数类型可以是Python任意类型。
import sys
from PyQt5.QtWidgets import QWidget, QApplication, QPushButton, QHBoxLayout
from functools import partial
class MainWindow(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
button1 = QPushButton("Button1", self)
button2 = QPushButton("Button2", self)
layout = QHBoxLayout()
layout.addWidget(button1)
layout.addWidget(button2)
self.setLayout(layout)
self.setWindowTitle("MainWindow Demo")
self.resize(800, 600)
# lambda
button1.clicked.connect(lambda: self.onButtonClicked(1))
button2.clicked.connect(lambda: self.onButtonClicked(2))
# partial
button1.clicked.connect(partial(self.onButtonClicked, 1))
button2.clicked.connect(partial(self.onButtonClicked, 2))
# 自定义槽函数
def onButtonClicked(self, n):
print("Button {0} is Clicked".format(n))
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())