Eric6与pyqt5学习笔记 4 【信号,事件和打包exe】

时间:2022-03-12 04:05:41

1.事件和处理事件

    所有的GUI应用都是事件驱动的。事件主要由应用的用户操作产生的。但是事件可能由其他条件触发,比如:一个网络连接,一个窗口管理器,一个定时器,这些动作都可能触发事件的产生。当我们调用应用的exec_()方法时,应用进入了主循环。主循环用于检测事件的产生并且将事件送到用于处理的对象中去。 

在事件模型,有三个参与者     

  • 事件源    

  • 事件对象    

  • 事件目标 

    事件源是状态发生改变的对象。它产生了事件。事件对象(evnet)封装了事件源中的状态变化。事件目标是想要被通知的对象。事件源对象代表了处理一个事件直到事件目标做出响应的任务。  PyQt5有一个独一无二的信号和槽机制来处理事件。信号和槽用于对象之间的通信。当指定事件发生,一个事件信号会被发射。槽可以被任何Python脚本调用。当和槽连接的信号被发射时,槽会被调用。


2.事件与信号机制的演示(时钟)

先放代码:

# -*- coding:utf-8 -*- 
'''
 @Author:      GETF
 @Email:       GETF_own@163.com
 @DateTime:    2017-11-09 15:12:14
 @Description: Description 
'''

import os
from PyQt5.QtGui import QIcon
import sys
from PyQt5.QtWidgets import (QWidget, QLCDNumber, QSlider, 
    QVBoxLayout, QApplication)
from PyQt5.QtCore import QDateTime,QTimer
 
class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.lcd = QLCDNumber(self)#设置数字类
        self.lcd.setDigitCount(25)
        self.lcd.setMode(QLCDNumber.Dec)
        self.lcd.setSegmentStyle(QLCDNumber.Flat)
        self.lcd.setStyleSheet("border: 1px solid green; color: green; background: silver;")#设置显示的颜色样式
        vbox = QVBoxLayout()#设置布局
        vbox.addWidget(self.lcd)
        self.setLayout(vbox)
        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('hello')
        dir_path = os.path.abspath(os.path.dirname(__file__))+'\image\\1.ico'
        self.setWindowIcon(QIcon(dir_path))
        self.show()
        self.timer = QTimer()
        self.timer.start(1)
        self.timer.timeout.connect(self.flush)#使用了计时器
        '''
        创建计时器->设置1ms刷新间隔->每次刷新执行flush函数
        '''       
        
    def flush(self):
        #获取系统当前时间
        dateTime=QDateTime.currentDateTime()
        #显示的内容
        self.lcd.display(dateTime.toString("yyyy-MM-dd HH:mm:ss.zzz"))

if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
显示效果如下:

Eric6与pyqt5学习笔记 4 【信号,事件和打包exe】


这里的原理解释一下:时钟设置的一秒每次的刷新去执行函数就是一个事件,而connect到了flush即是响应


2.打包命令

pyinstaller -F --distpath release main.py --noconsole
注意:进入工作目录下打包

打包完成产生release文件夹,里面即为打包完成的exe软件