pyqt5学习笔记:自定义参数 (给信号传入参数)

在pyqt编程过程中,经常会遇到给槽函数传递自定义参数的情况,比如有一个信号与槽函数的连接是

button1.clicked.connect(shou_page)

对于clicked 信号来说,是没有参数的。
对于shou_page 是可以有参数的

如:

def show_page(slef,name):
    print(name,"点啦")

一个有参数,一个无参数 ,运行起来肯定有错。

解决方法1:
lambda

# -*- coding: utf-8 -*-

"""
    【简介】
    部件中的信号槽传递,使用lambda表达式传参数示例


"""

from PyQt5.QtWidgets import QMainWindow, QPushButton, QWidget, QMessageBox, QApplication, QHBoxLayout
import sys


class WinForm(QMainWindow):
    def __init__(self, parent=None):
        super(WinForm, self).__init__(parent)
        self.setWindowTitle("信号和槽传递额外参数例子")
        button1 = QPushButton('Button 1')
        button2 = QPushButton('Button 2')

        button1.clicked.connect(lambda: self.onButtonClick(1))
        button2.clicked.connect(lambda: self.onButtonClick(2))

        layout = QHBoxLayout()
        layout.addWidget(button1)
        layout.addWidget(button2)

        main_frame = QWidget()
        main_frame.setLayout(layout)
        self.setCentralWidget(main_frame)

    def onButtonClick(self, n):
        print('Button {0} 被按下了'.format(n))
        QMessageBox.information(self, "信息提示框", 'Button {0} clicked'.format(n))


if __name__ == "__main__":
    app = QApplication(sys.argv)
    form = WinForm()
    form.show()
    sys.exit(app.exec_())

pyqt5学习笔记:自定义参数 (给信号传入参数)_第1张图片
点击 button1
弹出
pyqt5学习笔记:自定义参数 (给信号传入参数)_第2张图片
解释:
关键行 传入参数1
button1.clicked.connect(lambda: self.onButtonClick(1))

解决方法2:
partial函数

# -*- coding: utf-8 -*-

"""
    【简介】
     部件中的信号槽传递,使用partial函数传参数示例


"""

from PyQt5.QtWidgets import QMainWindow, QPushButton, QWidget, QMessageBox, QApplication, QHBoxLayout
import sys
from functools import partial


class WinForm(QMainWindow):
    def __init__(self, parent=None):
        super(WinForm, self).__init__(parent)
        self.setWindowTitle("信号和槽传递额外参数例子")
        button1 = QPushButton('Button 1')
        button2 = QPushButton('Button 2')

        button1.clicked.connect(partial(self.onButtonClick, 1))
        button2.clicked.connect(partial(self.onButtonClick, 2))

        layout = QHBoxLayout()
        layout.addWidget(button1)
        layout.addWidget(button2)

        main_frame = QWidget()
        main_frame.setLayout(layout)
        self.setCentralWidget(main_frame)

    def onButtonClick(self, n):
        print('Button {0} 被按下了'.format(n))
        QMessageBox.information(self, "信息提示框", 'Button {0} clicked'.format(n))


if __name__ == "__main__":
    app = QApplication(sys.argv)
    form = WinForm()
    form.show()
    sys.exit(app.exec_())

关键代码:
from functools import partial
button1.clicked.connect(partial(self.onButtonClick, 1))
button2.clicked.connect(partial(self.onButtonClick, 2))

代码来源于:书籍 pyqt5快速开发与实战

记录学习笔记

你可能感兴趣的:(PYQT(可视化界面),pyqt)