当前位置: 首页 > 编程笔记 >

PyQt事件处理机制

戚宏浚
2023-03-14
本文向大家介绍PyQt事件处理机制,包括了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,包括了事件处理示例-PyQt的使用技巧和注意事项,需要的朋友参考一下 按钮接受您的命令 1.在Python Shell或CMD提示符下获取输出 之前,我们深入研究了源代码及其引人入胜的输出。让我在此程序的几个关键部分为您提供帮助: window()是此处的用户定义函数,我们在其中设计并绘制了布局框架。 我们在这里使用了一个使用QDialog()的对话框。您可以

  • 本文向大家介绍事件处理示例(2)-PyQt,包括了事件处理示例(2)-PyQt的使用技巧和注意事项,需要的朋友参考一下 让我们尝试一些更有趣的东西, 1)键盘产生的事件 在执行程序之前,让我们尝试了解代码的关键点。这将有助于我们了解事件,信号和时段的性质。让我们一一研究它们: 这里使用一个简单的窗口作为界面。 keyPressEvent(),这只是PyQt框架中的预定义函数;用于定义所生成按键事件

  • 本文向大家介绍jQuery事件处理的特征(事件命名机制),包括了jQuery事件处理的特征(事件命名机制)的使用技巧和注意事项,需要的朋友参考一下 JQuery中的bind()和unbind(),提供了事件的绑定和取消机制,既可以绑定html默认支持的事件,也能够绑定自定义的事件。JQuery支持自定义事件,这显然给编程带来了极大的灵活性。下面就一起学习下,jquery事件处理的一些特性。 1、J

  • 本文向大家介绍Android事件分发机制(下) View的事件处理,包括了Android事件分发机制(下) View的事件处理的使用技巧和注意事项,需要的朋友参考一下 综述   在上篇文章Android中的事件分发机制(上)——ViewGroup的事件分发中,对ViewGroup的事件分发进行了详细的分析。在文章的最后ViewGroup的dispatchTouchEvent方法调用dispatch

  • 我们需要在constructor中对于事件与对应的handler函数进行绑定. 大多数时候我们在发出DOM事件的组件内部写我们的handler函数. 在下面的例子中,我们在组件内部创建了一个click handler, 因为我们想所有的Swithcer Component当被点击时,做出同样的响应. class Switcher extends React.Component { render

  • 我不喜欢流口水。我正在尝试使用Drools Fusion编写一个简单的复杂事件处理(CEP)应用程序。 我的要求是 我有一个简单的Event类,如下所示: 规则文件如下: 为了进行测试,我将向工作内存中注入4个事件,分别是e1、e2、e3、e4,时间线分别为0m、4m、10m、12m。 Jave类文件 我希望e1通过规则,因为它没有前面的事件。我还预计e3将通过,因为前面的比赛还有6分钟。 但是,