在控制台生成的应用程序中,指令/命令按顺序执行。但是基于GUI的应用程序是事件驱动的。这意味着函数/方法是为了响应某些事件而执行的。这些事件可能是用户生成的(单击按钮、选择项目、鼠标单击等);但有时系统也会生成一些事件(窗口管理器、Internet连接或计时器)。当我们执行exec()方法时,应用程序进入主循环。
PyQt的事件模型涉及三个参与者。
事件源:它生成事件。状态改变的是对象。
事件对象:事件对象或简称为“事件”绑定事件中的状态更改。
事件目标:事件目标是需要通知的对象。
信号和插槽用作在QObject之间进行通信的消息。PyQt具有处理时隙和信号的特殊机制。每当事件发生时都会生成信号。插槽可以是任何可调用的Python函数。调用连接的信号时调用。
您可以通过下图了解这种机制以及信号和插槽的功能:
插槽和信号之间的连接可以通过多种方式实现。第一个是较旧的,第二个被视为新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分钟。 但是,