pyQt中的信号

1. 说明

  • 在调用 exec_()方法时,应用会进入主循环,而主循环会监听、处理事件
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import (QWidget, QLCDNumber, QSlider,
    QVBoxLayout, QApplication)

class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        lcd = QLCDNumber(self)
        sld = QSlider(Qt.Horizontal, self)
        #布局
        vbox = QVBoxLayout()
        #向布局中添加组件
        vbox.addWidget(lcd)
        vbox.addWidget(sld)
        self.setLayout(vbox)
        #绑定
        sld.valueChanged.connect(lcd.display)
        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Signal and slot')
        self.show()

if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
  • QLCDNumber: 是一个仿LCD显示屏的qt组件
  • QSlider: 是qt滑块组件
  • sld.valueChanged.connect(lcd.display): 绑定语句。将滑块的数字变化(内置方法)用 connect()连接至lcd的显示(内置方法)
  • 本例中,事件发送者是 sld;事件接收者是 lcd

2. 事件处理器的重写

import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QWidget, QApplication

class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Event handler')
        self.show()

    def keyPressEvent(self, e):
        if e.key() == Qt.Key_Escape:
            self.close()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
  • keyPressEvent: 是qt中预先定义好的类。在覆写时会保有原先定义的函数操作,若发生冲突,则以用户复写的内容为准。
  • 该程序逻辑为:若按下 ESC键,就调用 Qwidget中的 close()函数
  • (self, e): e是行为的接收者,是事件对象。不同的事件覆写类会产生相应不同的事件对象。 e.key()表示接收到的按键

3. 事件发送者的判断

import sys
from PyQt5.QtWidgets import QMainWindow, QPushButton, QApplication

class Example(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        #定义了两个按钮并确定其位置
        btn1 = QPushButton("Button 1", self)
        btn1.move(30, 50)
        btn2 = QPushButton("Button 2", self)
        btn2.move(150, 50)
        #两个函数的点击事件都绑定至本类中定义的方法,即若发生点击,就调用定义的函数
        btn1.clicked.connect(self.buttonClicked)
        btn2.clicked.connect(self.buttonClicked)
        #调用方法,创建了一个工具栏,在26行会用到
        self.statusBar()
        self.setGeometry(300, 300, 290, 150)
        self.setWindowTitle('Event sender')
        self.show()

    def buttonClicked(self):
        #用QMainWindow中的sender()方法确定了发送者,并获得了发送者的title
        target = self.sender()
        self.statusBar().showMessage(target.text() + ' was pressed')

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

4. 信号发送

常继承 QObject 类,调用其中的方法来发送信号
import sys
from PyQt5.QtCore import pyqtSignal, QObject
from PyQt5.QtWidgets import QMainWindow, QApplication

#定义类,继承自QObject,其中的pyqtSignal()用于发送信号。
class Communicate(QObject):
    #用pyqtSignal()申请信号变量closeApp
    closeApp = pyqtSignal()

class Example(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        #创建了一个变量c,是一个含信号closeApp的对象
        self.c = Communicate()
        #将该信号与QMainWindow的close相绑定
        self.c.closeApp.connect(self.close)
        self.setGeometry(300, 300, 290, 150)
        self.setWindowTitle('Emit signal')
        self.show()

    def mousePressEvent(self, event):
        #覆写了该类,有点击事件发生时,就发送c中的closeApp信号,信号会调用close
        self.c.closeApp.emit()

if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

Original: https://www.cnblogs.com/dysonxxxxx/p/16582061.html
Author: dysonkkk
Title: pyQt中的信号

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/578848/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • FusionAccess桌面云安装(windows AD方法)

    创建FusionAccess虚拟机 选择自定义 默认兼容 选择稍后安装操作系统 选择Linux SUSE Linux 名字位置自己选择 选择最少4个处理器 选择最少8G内存 选择仅…

    Linux 2023年6月8日
    0101
  • python爬虫配置IP代理池(ProxyPool)

    关注我的公众号【靠谱杨的挨踢生活】回复 ProxyPool可以免费获取网盘链接。也可自行搜索下载:https://github.com/Python3WebSpider/Proxy…

    Linux 2023年6月14日
    0101
  • SSH的 Write failed: Broken pipe 问题

    问题现象: 表示连接管道已经断开 解决方法: 方法一:客户端配置在客户端的 ~/.ssh/ config文件(如不存在请自行创建)中添加下面内容:ServerAliveInterv…

    Linux 2023年6月8日
    083
  • 生成随机数的若干种方法

    背景: 创建账户时我们需要配置初始随机密码,使用手机号注册时需要随机验证码,抽奖活动需要随机点名,俄罗斯方块游戏需要随机出形状。这些案例都在说明一个问题,随机数据很重要!而在 Sh…

    Linux 2023年6月6日
    079
  • 使用 Spring Boot Admin 监控应用状态

    1 Spring Boot Actuator Spring Boot Actuator 是 Spring Boot 提供的对应用的自省和监控功能,如健康检查,审计,指标收集,HTT…

    Linux 2023年6月7日
    092
  • Linux安装管理

    Linux系列 包管理工具 单个软件包 管理工具 RedHat系列 Redhat Centos Fedora yum rpm .rpm Debian系列 Ubuntu apt-ge…

    Linux 2023年6月8日
    087
  • Guava中这些Map的骚操作,让我的代码量减少了50%

    Guava是google公司开发的一款Java类库扩展工具包,内含了丰富的API,涵盖了集合、缓存、并发、I/O等多个方面。使用这些API一方面可以简化我们代码,使代码更为优雅,另…

    Linux 2023年6月7日
    0105
  • Linux 网络分析必备技能:tcpdump 实战详解

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年6月7日
    082
  • 什么是可调CAP策略?为什么需要可调CAP策略?

    在说可调CAP策略之前,我们要先说说CAP理论。 CAP理论是设计分布式系统必用的黄金法则,它提出了设计分布式系统的三个基本要求:一致性(Consistency)、可用性(Avai…

    Linux 2023年6月6日
    0106
  • zabbix5.0报错PHP时区未设置(配置参数”date.timezone”)

    解决办法 : 1、编辑文件/etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf,取消注释并设置为所在地时区 vim /etc/opt/rh/rh-p…

    Linux 2023年6月7日
    072
  • 软件负载均衡

    软件负载均衡成本几乎为零,基本都是开源软件。例如:LVS、HAProxy、Nginx等。 该机群包含一台Nginx服务器,两台Web服务器(node2和node3) 修改nginx…

    Linux 2023年6月11日
    058
  • 面试题目汇总

    目录: 1、数字数组数字数组2、字符串字符串3、链表 链表4、二叉树二叉树 5、堆栈 堆栈 posted @2019-12-11 20:35 风御之举 阅读(63 ) 评论() 编…

    Linux 2023年6月13日
    082
  • ASCLL 字符码

    信息在计算机上是用二进制数表示的,这种表示法让人很难理解。因此,计算机上都配有输入和输出设备,这些设备的主要目的就是以一种人类可阅读的形式将信息在这些设备上显示出来供人阅读理解。为…

    Linux 2023年6月7日
    0106
  • Windows Server 新增磁盘处于脱机状态解决办法

    解决方案: Cmd命令行操作如下: 1,进入diskpart模式 2、列出磁盘情况 3、选择脱机的磁盘 4、联机磁盘 5、清除磁盘属性 6、进入磁盘管理,提示初始化 每天记录一点,…

    Linux 2023年6月8日
    0100
  • 搭建ES集群

    添加以下elasticsearch用户: bash;gutter:true; 1 useradd elasticsearch 2 passwd elasticsearch</…

    Linux 2023年6月8日
    076
  • QT编程中的char*,wchar_t*与QString之间的转换

    //QString to wchar_t:const wchar_t * encodedName = reinterpret_cast Original: https://www….

    Linux 2023年6月14日
    079
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球