PyQT 的信号和槽
一、基本概念
信号与槽是Qt的核心机制,也是PyQt5编程时对象之间通信的基础,在PyQt5中每一个QObject对象(包括各种窗口和控件)都支持信号与槽机制,通过信号与槽之间的关联,就可以实现对象之间的通信,当信号发射时,连接的槽函数就自动执行,在PyQt5中信号与槽是通过对象的 signal.connect() 连接的。
PyQt5使用信号与槽的主要特点:
- 一个信号可以使用多个槽
- 一个槽可以监听多个信号
- 信号与信号之间可以互联
- 信号与槽之间的连接可以跨线程
- 信号与槽的连接方式既可以是同步也可以是异步
- 信号的参数可以是任何Python类型
二、信号和槽的使用
1. 使用内置的信号和槽
import sys
from PySide2.QtWidgets import QPushButton, QMessageBox, QApplication, QWidget
def pop_message():
QMessageBox.information(widget, 'Pop messgae', 'OK')
app = QApplication(sys.argv)
widget = QWidget()
btn = QPushButton('Test Button', widget)
btn.clicked.connect(pop_message)
widget.resize(300,300)
widget.show()
sys.exit(app.exec_())
2. 使用自定义的信号和槽
# -*- coding: utf-8 -*-
import sys
from PySide2 import QtCore
from PySide2.QtWidgets import *
class WinForm(QWidget):
# 自定义信号,不带参数
button_clicked_signal = QtCore.Signal()
def __init__(self, parent=None):
super().__init__(parent)
self.setWindowTitle('自定义信号和槽函数示例')
self.resize(300, 150)
# 接收信号,连接到自定义槽函数
self.button_clicked_signal.connect(self.pop_message)
def pop_message(self):
QMessageBox.information(self, 'Pop messgae', 'OK')
def mousePressEvent(self, event): # 重写鼠标按下事件
if event.button() == QtCore.Qt.LeftButton: # 当鼠标左键单击时
self.button_clicked_signal.emit() # 发射信号
if __name__ == '__main__':
app = QApplication(sys.argv)
win = WinForm()
win.show()
sys.exit(app.exec_())
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?