美文网首页
PyQt5编程(22):自定义事件

PyQt5编程(22):自定义事件

作者: 用电热毯烤猪 | 来源:发表于2018-01-01 21:43 被阅读0次
    创建自定义事件,要使用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()))

    相关文章

      网友评论

          本文标题:PyQt5编程(22):自定义事件

          本文链接:https://www.haomeiwen.com/subject/gdrxnxtx.html