在下面的示例中,我们使用循环创建了5个按钮,并使用functools.partial
将按钮的点击信号连接到on_button_clicked
槽函数。这样,每个按钮点击时,槽函数会被调用,并将按钮的索引作为参数传递给槽函数。这使得每个按钮点击时可以区分出是哪个按钮被点击。
您也可以使用lambda表达式来实现类似的效果。不过,functools.partial
更具可读性,特别是在需要传递多个参数的情况下。
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget
from functools import partial
class MyMainWindow(QMainWindow):
def __init__(self):
super(MyMainWindow, self).__init__()
self.initUI()
def initUI(self):
# 创建主窗口布局
central_widget = QWidget()
layout = QVBoxLayout(central_widget)
# 循环创建按钮并绑定不同参数的槽函数
for i in range(5):
button = QPushButton(f'Button {i}')
# 使用functools.partial绑定槽函数,并传递参数
button.clicked.connect(partial(self.on_button_clicked, i))
layout.addWidget(button)
self.setCentralWidget(central_widget)
self.setGeometry(100, 100, 300, 200)
self.setWindowTitle('PyQt5 Buttons with Different Parameters')
self.show()
def on_button_clicked(self, button_index):
print(f"Button {button_index} clicked")
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MyMainWindow()
sys.exit(app.exec_())