ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

PyQT 的信号和槽

2022-08-14 13:04:17  阅读:233  来源: 互联网

标签:__ widget self PyQT sys 信号 import


一、基本概念

信号与槽是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_())

标签:__,widget,self,PyQT,sys,信号,import
来源: https://www.cnblogs.com/cokefentas/p/16585224.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有