PyQt5事件和信号

本文详细介绍了PyQt5中的事件驱动模型,包括事件源、事件和事件目标的概念,强调了信号与槽机制在对象间通信的作用。通过实例展示了如何使用QLCDNumber和QSlider模块响应滑动事件,以及如何重写事件处理器、获取事件对象信息、确定事件发送者和发送自定义信号的方法。
摘要由CSDN通过智能技术生成
一、事件

所有的应用都是事件驱动的。事件大部分都是由用户的行为产生的,当 然也有其他的事件产生方式,比如网络的连接,窗口管理器或者定时器 等。调用应用的exec_()方法时,应用会进入主循环,主循环会监听和分发事件

在事件模型中,有三个角色:

  • 事件源
  • 事件
  • 事件目标

事件源就是发生了状态改变的对象,事件是这个对象状态的改变撞他改变的内容,事件目标是事件想作用的目标,事件源绑定事件处理函数, 然后作用于事件目标身上

PyQt5处理事件方面有个signal and slot机制。Signals and slots用于对象间的通讯。事件触发的时候,发生一个signal,slot 是用来被Python调用的(相当于一个句柄?这个词也好恶心,就是相 当于事件的绑定函数)slot只有在事件触发的时候才能调用

二、Signals & slots

例子中,显示了 QtGui.QLCDNumber 和 QtGui.QSlider 模块,我们 能拖动滑块让数字跟着发生改变

代码实现:

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_())
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值