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_())显示效果如下:
这里的原理解释一下:时钟设置的一秒每次的刷新去执行函数就是一个事件,而connect到了flush即是响应
2.打包命令
pyinstaller -F --distpath release main.py --noconsole
注意:进入工作目录下打包
打包完成产生release文件夹,里面即为打包完成的exe软件