PyQt事件处理机制

事件

在控制台生成的应用程序中,指令/命令按顺序执行。但是基于GUI的应用程序是事件驱动的。这意味着函数/方法是为了响应某些事件而执行的。这些事件可能是用户生成的(单击按钮、选择项目、鼠标单击等);但有时系统也会生成一些事件(窗口管理器、Internet连接或计时器)。当我们执行exec()方法时,应用程序进入主循环。

PyQt的事件模型涉及三个参与者。

  1. 事件源:它生成事件。状态改变的是对象。

  2. 事件对象:事件对象或简称为“事件”绑定事件中的状态更改。

  3. 事件目标:事件目标是需要通知的对象。

信号和插槽

信号和插槽用作在QObject之间进行通信的消息。PyQt具有处理时隙和信号的特殊机制。每当事件发生时都会生成信号。插槽可以是任何可调用的Python函数。调用连接的信号时调用。

您可以通过下了解这种机制以及信号和插槽的功能:


新的PyQt API

插槽和信号之间的连接可以通过多种方式实现。第一个是较旧的,第二个被视为新API。

旧方法:

QtCore.QObject.connect(widget, QtCore.SIGNAL('signalname'), slot_function)

新方法:

widget.signal.connect(slot_function)

注意:第二种方法被认为是更pythonic的。并在提到的两种方法中最常用。

下面通过使用由小部件“ button” .Viz生成的简单“ click”事件来解释这些问题。

旧方法:

QtCore.QObject.connect(button, QtCore.SIGNAL("clicked()"), slot_function)

新方法:

button.clicked.connect(slot_function)

在这里,我提供了一个简单的示例来处理PyQt中的事件。这实际上是“鼠标按钮按下”事件的情况。在这里,我正在考虑鼠标的左键单击/右键单击。当您在窗口区域中按下鼠标按钮时,GUI窗口将简单地关闭。

源代码

import sys

from PyQt4 import QtGui, QtCore

        

class Communicate(QtCore.QObject):

    

    closeApp = QtCore.pyqtSignal() 

 

class GOAL(QtGui.QMainWindow):

    

    def __init__(self):

        super(GOAL, self).__init__()

        

        self.initGUI()       

        

    def initGUI(self):      

        self.c = Communicate()

        self.c.closeApp.connect(self.close)       

        

        self.setGeometry(300, 300, 290, 150)

        self.setWindowTitle('MOUSE EVENT-SIGNAL')

        self.show()

        

        

    def mousePressEvent(self, event):

        

        self.c.closeApp.emit()

        

        

def main():

    

    app = QtGui.QApplication(sys.argv)

    ex = GOAL()

    sys.exit(app.exec_())

if __name__ == '__main__':

    main()

运行程序时将弹出该窗口。并且,当您通过单击鼠标生成事件时,它将关闭。

概要

因此,到目前为止,我们终于了解了事件处理的概念和理论。这将有助于我们确定地在进一步的实践中理解和实施此机制。在接下来的文章中,我们将研究和练习更多事件处理示例以及正在考虑的各种事件。只需遍历代码并更好地理解它。这很简单;一些用户定义的函数,一些PyQt类和对象以及OOP概念。这是您遍历代码时需要考虑的全部。不过,如果您遇到任何麻烦,请随时在评论部分提问。下篇文章见。快乐的学习!

以上是 PyQt事件处理机制 的全部内容, 来源链接: utcz.com/z/334609.html

回到顶部