zoukankan      html  css  js  c++  java
  • Events

    All GUI applications are event-driven. Events are generated mainly by the user of an application. But they can be generated by other means as well: e.g. an Internet connection, a window manager, or a timer. When we call the application's exec_() method, the application enters the main loop. The main loop fetches events and sends them to the objects.

    In the event model, there are three participants:

    • event source
    • event object
    • event target

    The event source is the object whose state changes. It generates events. The event object (event) encapsulates the state changes in the event source. The event target is the object that wants to be notified. Event source object delegates the task of handling an event to the event target.

    PyQt4 has a unique signal and slot mechanism to deal with events. Signals and slots are used for communication between objects. A signal is emitted when a particular event occurs. A slot can be any Python callable. A slot is called when a signal connected to it is emitted.

    New API

    PyQt4.5 introduced a new style API for working with signals and slots.

    QtCore.QObject.connect(button, QtCore.SIGNAL('clicked()'), self.onClicked)
    

    This is the old style API.

    button.clicked.connect(self.onClicked)
    

    The new style adheres more to the Python standards.

    Signals & Slots

    This is a simple example demonstrating signals and slots in PyQt4.

    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    
    """
    ZetCode PyQt4 tutorial 
    
    In this example, we connect a signal
    of a QtGui.QSlider to a slot 
    of a QtGui.QLCDNumber. 
    
    author: Jan Bodnar
    website: zetcode.com 
    last edited: October 2011
    """
    
    import sys
    from PyQt4 import QtGui, QtCore
    
    
    class Example(QtGui.QWidget):
        
        def __init__(self):
            super(Example, self).__init__()
            
            self.initUI()
            
        def initUI(self):
            
            lcd = QtGui.QLCDNumber(self)
            sld = QtGui.QSlider(QtCore.Qt.Horizontal, self)
    
            vbox = QtGui.QVBoxLayout()
            vbox.addWidget(lcd)
            vbox.addWidget(sld)
    
            self.setLayout(vbox)
            sld.valueChanged.connect(lcd.display)
            
            self.setGeometry(300, 300, 250, 150)
            self.setWindowTitle('Signal & slot')
            self.show()
            
    def main():
        
        app = QtGui.QApplication(sys.argv)
        ex = Example()
        sys.exit(app.exec_())
    
    
    if __name__ == '__main__':
        main()
    

    In our example, we display a QtGui.QLCDNumber and a QtGui.QSlider. We change the lcd number by dragging the slider knob.

    sld.valueChanged.connect(lcd.display)
    

    Here we connect a valueChanged signal of the slider to the display slot of the lcd number.

    The sender is an object that sends a signal. The receiver is the object that receives the signal. Theslot is the method that reacts to the signal.

    Signals & slotFigure: Signal & slot

  • 相关阅读:
    2. 替换空格
    1.二维数组中的查找
    《STL源码剖析》相关面试题总结
    STL详解
    java之Stack详细介绍
    ArrayList、LinkedList、Vector的区别
    记一次vue升级element-ui的体验
    nestJs项目打包部署的方法
    Echarts 图例 legend formatter 如何返回 html
    微信小程序echarts字体大小 真机和开发者工具不一致(太小)的解决办法
  • 原文地址:https://www.cnblogs.com/hushaojun/p/4435557.html
Copyright © 2011-2022 走看看