【PyQt5】为循环中的按钮绑定带有不同参数的槽函数

在下面的示例中,我们使用循环创建了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_())

你可能感兴趣的:(pyqt5,python)