PyQt5信号与槽简单示例

信号槽是qt核心机制,也是Pyqt编程中对象之间进行通信的机制。信号与槽机制示意图如下所示:
在这里插入图片描述

信号(Signal)就是在特定情况下被发射的事件。
槽(Slot)就是对信号响应的函数。
当事件或状态发生改变时,就会发出信号。同时,这个信号会触发所有与这个事件(信号)相关的函数(槽)。信号和槽可以是多对多关系。一个信号可以连接多个槽,一个槽也可以监听多个信号。
下面演示两个函数

# 演示单击按钮时关闭窗口,使用自定义的信号与槽函数
from PyQt5.QtWidgets import *
from PyQt5.QtCore import pyqtSignal
import sys

class Winform(QWidget):
    #自定义信号,不带参数
    button_clicked_signal=pyqtSignal()

    def __init__(self,parent=None):
        super().__init__(parent)
        self.setWindowTitle('自定义信号与槽函数示例')
        self.resize(400,100)
        btn = QPushButton('关闭',self)
        #连接信号与槽函数
        btn.clicked.connect(self.btn_clicked)
        #接收信号,连接到自定义的槽函数
        self.button_clicked_signal.connect(self.btn_close)

    def btn_clicked(self):
    #     发送自定义信号,无参数
        self.button_clicked_signal.emit()

    def btn_close(self):
        self.close()

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


先把信号绑定到槽函数上,然后接收信号,连接到自定义的槽函数。通过点击按钮触发自定义的信号(button_clicked_signal),绑定自定义的槽函数(self.btn_close)。运行如图:
在这里插入图片描述

拖动滑块改变颜色

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

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class Example(QWidget):
	def __init__(self):
		super(Example, self).__init__()
		self.initUI()
		
	def initUI(self): 
		hbox = QHBoxLayout( )
		self.l1 = QLabel("拖动滑块改变颜色")
		self.l1.setFont(QFont("SanSerif",16))
		hbox.addWidget(self.l1)
		self.s1 = QScrollBar()  #滑块条
		self.s1.setMaximum(255)  #最大值为255,因为这是RGB分量的最大值,默认为0
		self.s1.sliderMoved.connect(self.sliderval)  #把移动滑块条信号绑定自定义槽函数
		self.s2 = QScrollBar()
		self.s2.setMaximum(255)
		self.s2.sliderMoved.connect(self.sliderval)
		self.s3 = QScrollBar()
		self.s3.setMaximum(255)
		self.s3.sliderMoved.connect(self.sliderval)
		hbox.addWidget(self.s1)
		hbox.addWidget(self.s2)
		hbox.addWidget(self.s3)
		self.setGeometry(300, 300, 300, 200)
		self.setWindowTitle('字体例子')
		self.setLayout( hbox )
		
	def sliderval(self):
		print(self.s1.value(), self.s2.value(), self.s3.value() )
		palette = QPalette()
		c = QColor(self.s1.value(), self.s2.value(), self.s3.value(),255)
		palette.setColor(QPalette.Foreground,c)
		self.l1.setPalette(palette)

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

运行示例如图所示:
在这里插入图片描述
在这里插入图片描述
另外推荐新手可以使用github开源的《PyQt5快速开发与实战》的代码。

猜你喜欢

转载自blog.csdn.net/qq_45701131/article/details/112411221