PyQt5入门(二十一)信号与槽(下)

目录

一.为窗口添加信号

二.多线程更新UI数据

三.信号与槽自动连接

四.用Lambda表达式为槽函数传递参数

五.用partial对象为槽函数传递参数


一.为窗口添加信号

本质就是为一个类添加信号,只不过这个类是窗口类。

代码:

import sys,math
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *


class WinSignal(QWidget):
    #定义一个信号
    btn_clicked_signal=pyqtSignal()

    def __init__(self):
        super(WinSignal, self).__init__()
        self.setWindowTitle('为窗口添加信号')
        self.resize(300,100)

        btn=QPushButton('关闭窗口',self)
        btn.clicked.connect(self.btn_clicked)
        self.btn_clicked_signal.connect(self.btn_close)

    #起触发函数作用的槽函数
    def btn_clicked(self):
        self.btn_clicked_signal.emit()
    #关闭窗口作用的槽函数
    def btn_close(self):
        self.close()



if __name__=='__main__':
    app=QApplication(sys.argv)
    main=WinSignal()
    main.show()
    sys.exit(app.exec_())

运行结果:

PyQt5入门(二十一)信号与槽(下)_第1张图片

 

二.多线程更新UI数据

在两个线程中传递数据。

代码:

import sys,math
import time
from PyQt5.QtWidgets import QApplication,QDialog,QLineEdit
from PyQt5.QtCore import QThread,pyqtSignal,QDateTime


class BackendThread(QThread):
    #更新日期的信号
    update_date=pyqtSignal(str)
    def run(self):
        while True:
            date=QDateTime.currentDateTime()
            currentTime=date.toString('yyyy-MM-dd hh:mm:ss')
            #信号参数是当前时间
            self.update_date.emit(str(currentTime))
            time.sleep(1)#隔1s就发送一次信号


class ThreadUpdateUI(QDialog):
    def __init__(self):
        QDialog.__init__(self)
        self.setWindowTitle('多线程更新UI数据')
        self.resize(400,100)
        #存放当前时间
        self.input=QLineEdit(self)
        self.input.resize(400,100)
        self.initUI()

    def initUI(self):
        self.backend=BackendThread()
        self.backend.update_date.connect(self.handleDisplay)
        self.backend.start()#开启线程,自动调用run

    # 槽函数是主线程
    def handleDisplay(self,data): #data是当前时间
        self.input.setText(data)


if __name__=='__main__':
    app=QApplication(sys.argv)
    main=ThreadUpdateUI()
    main.show()
    sys.exit(app.exec_())

运行结果:

PyQt5入门(二十一)信号与槽(下)_第2张图片

 

三.信号与槽自动连接

代码:

运行结果:

 

四.用Lambda表达式为槽函数传递参数

代码:

运行结果:

 

五.用partial对象为槽函数传递参数

代码:

运行结果:

你可能感兴趣的:(PyQt5,用partial对象传递参数,用Lambda表达式传递参数,pyqt5信号与槽自动连接,pyqt5多线程更新UI数据,pyqt5为窗口添加信号)