热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

pyqt5自定义事件QEventregisterEventType

自定义事件(没搞懂,仅作为测试)fromPyQt5.QtCoreimport*fromPyQt5.QtWidgetsimport*f

自定义事件 (没搞懂,仅作为测试)

from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtWebEngineWidgets import *
from PyQt5.QtPrintSupport import *import os
import sysclass MyEvent(QEvent):idType = QEvent.registerEventType()def __init__(self, data):QEvent.__init__(self, MyEvent.idType)self.data = dataprint("MyEvent.idType ", MyEvent.idType)def get_data(self):return self.dataclass MainWidget(QMainWindow):def __init__(self, parent=None):super(MainWidget, self).__init__(parent)# 设置主窗体标签self.setWindowTitle("QMainWindow 例子")self.resize(400, 200)self.emit_btn = QPushButton("emit", self)self.emit_btn.clicked.connect(self.call_back_emit_btn)self.label = QLabel("Hello", self)self.label.setGeometry(50, 50, 200, 20)self.fire_btn = QPushButton("fire", self)self.fire_btn.clicked.connect(self.call_back_fire_btn)self.fire_btn.move(0, 100)self.emit_event = MyEvent("512")self.fire_event = MyEvent("215")def call_back_emit_btn(self):passQCoreApplication.sendEvent(self, self.emit_event)def call_back_fire_btn(self):passQCoreApplication.sendEvent(self, self.fire_event)def customEvent(self, e):print("customEvent:", e.type())if e.type() == MyEvent.idType:self.label.setText("Received : {0}".format(e.get_data()))if __name__ == "__main__":app = QApplication(sys.argv)main = MainWidget()main.show()sys.exit(app.exec_())

在这里插入图片描述

参考:
https://blog.csdn.net/LaoYuanPython/article/details/102527871
为了方便起见,可以使用 registerEventType()函数为应用程序注册和保留自定义事件类型。这样做可以避免意外地重新使用应用程序中其他地方已在使用的自定义事件类型。

用户自定义事件的值必须在QEvent.User事件到QEvent.MaxUser事件之间,其中QEvent.User事件的常量值为1000,QEvent.MaxUser事件的常量值为65535。

http://blog.sina.com.cn/s/blog_6483fa330102xp0y.html
创建自定义事件,要使用QCoreApplication的以下静态方法:
sendEvent(QObject receiver, QEvent event) - 事件被QCoreApplication的notify()函数直接发送给receiver对象,返回值是事件处理函数的返回值。使用这个函数必须要在栈上创建对象;
postEvent(QObject receiver, QEvent event) - 事件添加到事件对列是并立即返回,等待处理。 这种方法是线程安全的,因此它可以在多线程应用程序中用于在线程之间交换事件。另外,使用这个函数必须要在堆上创建对象。
这两个函数中的 receiver参数为事件发往的控件;event参数可为标准事件类的事件( 如QMouseEvent)对象,也可以是继承自QEvent的了类 class对象。以下是发送MouseButtonPress事件给标签控件的代码:
e = QtGui.QMouseEvent(QtCore.QEvent.MouseButtonPress,
QtCore.QPointF(5, 5), QtCore.Qt.LeftButton,
QtCore.Qt.LeftButton, QtCore.Qt.NoModifier)
QtCore.QCoreApplication.sendEvent(self.label, e)
要发送自定义事件,您必须创建一个QEvent的继承类,并在类中使用registerEventType( )静态函数注册自定义事件,同时将事件标识符存储在类属性中。
class MyEvent(QtCore.QEvent):
idType = QtCore.QEvent.registerEventType()
def init(self, data):
QtCore.QEvent.init(self, MyEvent.idType)
self.data = data
def get_data(self):
return self.data
将MyEvent事件发送到标签控件的代码:
QtCore.QCoreApplication.sendEvent(self.label, MyEvent(“512”))
可以使用event(self,even)或customEvent(self,event)方法来处理自定义事件。例如:
def customEvent(self, e):
if e.type() == MyEvent.idType:
self.setText(“Received data: {0}”.format(e.get_data()))


推荐阅读
author-avatar
sprite_77
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有