PythonPyQt5教程(三)电子钟案例
目录
一、前言:
- 我们在前面学习了一些使用PyQt5开发的相关知识,
- 本次我们将实现一个简单的电子时钟来加强python的编码能力及PyQt5相关开发知识的使用。
- 本次我们主要用到两个新的知识点:
1、QTimer
- 描述:
- QTimer类提供了定时器信号和单触发定时器。
- 它在内部使用定时器事件来提供更通用的定时器。
- 使用操作:创建一个QTimer,使用start来开始并且把它的timeout()连接到适当的槽。当这段时间过去了,它将会发射timeout()信号。
2、QLCDNumber
- 描述:
- 用于显示LCD数字。它可以显示几乎任意大小的数字。可以显示十进制、十六进制、八进制或二进制数。使用display()槽连接到数据源。
二、编码实战
-
OK,我们先来看下本次的效果图吧。
-
我们先来看下完整的代码,然后再分段来讲解。
-
代码不多,50行不到哦。
from PyQt5.QtGui import * from PyQt5.QtCore import *; from PyQt5.QtWidgets import (QWidget,QDesktopWidget,QLCDNumber,QVBoxLayout,QApplication) import time,sys class MyTime(QWidget): def __init__(self): super(MyTime,self).__init__(); self.initUI(); self.init_timer(); def update_time(self): self.lcd.display(time.strftime('%X',time.localtime())) def init_timer(self): self.timer = QTimer(); self.timer.setInterval(1000); self.timer.start(); self.timer.timeout.connect(self.update_time); def initUI(self): self.resize(200,200); self.setWindowTitle('时钟'); self.move_center(); self.main_p = QPalette(); self.main_p.setColor(QPalette.Background,Qt.darkYellow); self.setAutoFillBackground(True); self.setPalette(self.main_p); self.lcd = QLCDNumber(); self.lcd.setDigitCount(10); self.lcd.setMode(QLCDNumber.Dec); self.lcd.setSegmentStyle(QLCDNumber.Flat); self.lcd_p = QPalette(); self.lcd_p.setColor(QPalette.Normal,QPalette.WindowText,Qt.black) self.lcd.setPalette(self.lcd_p) self.lcd.display(time.strftime('%X',time.localtime())) self.main_layout = QVBoxLayout(); self.main_layout.addWidget(self.lcd); self.main_layout.setAlignment(Qt.AlignCenter); self.setLayout(self.main_layout); def move_center(self): m_rect= self.frameGeometry(); w_rect = QDesktopWidget().availableGeometry(); w_center_point = w_rect.center(); m_rect.moveCenter(w_center_point); self.move(m_rect.topLeft()); if __name__=='__main__': app = QApplication(sys.argv); m_timer = MyTime(); m_timer.show(); sys.exit(QApplication.exec_());
代码详解:
- 1、首先我们继承QWidget来创建一个自定义时钟类。
- 2、在initUI方法里完成界面的编写。
- 3、在init_timer方法里完成有关时钟的初始化。
我们看下initUI里面的代码:
- 设置大小那些我们就不讲了,本次我们还多了一个类QPalette,我们通过它来设置组件的背景颜色及字体的背景颜色等。
背景颜色的设置
- self.main_p = QPalette();:创建一个QPalette类,其相当于调色板
- self.main_p.setColor(QPalette.Background,Qt.darkYellow); :设置背景颜色为darkYellow
- self.setAutoFillBackground(True); :设置窗体自动填充背景颜色
- self.setPalette(self.main_p);:把调色板设置给我们的顶级窗口就可以了哦。这样背景颜色就设置好了。
LCD显示组件的设置
- self.lcd = QLCDNumber();创建一个QLCDNumber
- self.lcd.setDigitCount(10); 设置显示数字个数
- self.lcd.setMode(QLCDNumber.Dec);设置显示模式为十进制
- self.lcd.setSegmentStyle(QLCDNumber.Flat);:设置样式为平面模式
- 再下来是一段设置里面字体颜色的,与背景颜色类似,我就不说了 显示时间:
- self.lcd.display(time.strftime(’%X’,time.localtime()))
- time.strftime():接收时间元组,并返回以可读字符串表示的当地时间,格式由参数format决定。
- %X 表示显示本地相应的时间表示
- time.localtime()获取本地时间。
- self.main_layout = QVBoxLayout(); 创建一个盒子布局
- self.main_layout.addWidget(self.lcd);把我们的显示组件添加到布局中。
- self.main_layout.setAlignment(Qt.AlignCenter);:设置组件在布局的中心
- self.setLayout(self.main_layout);:设置给我们的顶层布局
电子钟的初始化
- 我们再看下init_timer方法
- self.timer = QTimer();:创建一个定时器
- self.timer.setInterval(1000);:设置定时器每1秒触发一次timeout信号
- self.timer.start();:启动定时器
- self.timer.timeout.connect(self.update_time);:timeout信号与update_time方法关联,再timeout触发时,通知我们的update_time.再update_time里更新显示的时间。
三、总结
- 本次我们学习了QTimer的使用、QLCDNumber的显示、还增加了背景颜色、字体颜色的设置等。
- 后面我们将一点一点增加复杂度,循序渐进。