【前言】前几日通过编写命令行通讯录,掌握了Python的基本语法结构,于是开始向更高水平冲击,利用Eric与Qt Designer 编写一个带界面的小程序。本次实操中也确实遇到了不少问题,通过学习也都解决了,达到了学习进步的目的。
【吐槽】写博客比编程序难多了,程序写了一下午,博客写了一整天,这么费力的写出来,希望可以帮助到一些刚开始学习Python的朋友。由于我不是科班出身,编程纯属业余爱好,所以也是一边学一边编的,有不足的地方还请批评指正。
1.目标
编写一个倒计时时钟程序,用饼图的形式显示一天、一周、一个月以及一年已经过了多少时间还剩多少时间,用于提醒人珍惜时间。
2.实现方法
- 由于准库time模块不能继承,创建一个新的时间的类,使用标准库time模块来进行时间的相关操作。
- 使用Eric与Qt Designer开发
- 使用matplotlib的pie函数绘制饼图
3.菜鸟难点
- 对time模块不熟悉,不知如何使用。
- Qt Designer的使用。
- Qt中添加matplotlib组件窗口。
3.1 time模块
time 模块提供了一些处理日期和一天内时间的函数。它是建立在 C 运行时库的简单封装。
给定的日期和时间可以被表示为浮点型(从参考时间, 通常是 1970.1.1 到现在经过的秒数,即 Unix 格式),或者一个表示时间的 struct (类元组)。
方法
3.1.1 time()
返回从1970.1.1 到现在经过的秒数
>>> import time
>>> time.time()
1471794516.136771
3.1.2 localtime()
返回元组形式的时间,
>>> import time
>>> time.localtime()
time.struct_time(tm_year=2016, tm_mon=8, tm_mday=21, tm_hour=23, tm_min=49, tm_sec=57, tm_wday=6, tm_yday=234, tm_isdst=0)
tm_year |
年 |
tm_mon |
月 |
tm_mday |
日 |
tm_hour |
时 |
tm_min |
分 |
tm_sec |
秒 |
tm_wday |
周几(0-6) |
tm_yday |
一年中的第几天 |
tm_isdst |
-1代表系统判断是否为夏时令 0代表非夏时令 1代表夏时令 |
3.1.3 ctime()
返回字符串形式的时间
>>> import time
>>> time.ctime()
'Sun Aug 21 23:50:56 2016'
3.1.4 strptime()
将字符串形式的时间转换成元组形式的时间
%y |
两位数年份(00-99 ) |
%Y |
四位数年份(000-9999 ) |
%m |
月份(01-12) |
%d |
日期 0-31 |
%H |
24小时制小时数( 0-23 ) |
%I |
12小时制小时数( 01-12 ) |
%M |
分钟数(00-59) |
%S |
秒(00-59) |
%a |
本地星期简化名称 |
%A |
本地星期完整名称 |
%b |
本地月份简化名称 |
%B |
本地月份完整名称 |
%c |
本地相应的日期表示和时间表示 |
%j |
年内的第几天(001-366) |
%p |
本地A.M.或 P.M. |
%U |
一年中的星期数(00-53),星期天为星期的开始 |
%w |
星期(0-6),星期天为星期的开始 |
%W |
一年中的星期数(00-53),星期一为星期的开始 |
%x |
本地相应的日期表示 |
%X |
本地相应的时间表示 |
%Z |
当前时区名称 |
%% |
%号 |
>>> import time
>>> time.strptime('20160821','%Y%m%d')
time.struct_time(tm_year=2016, tm_mon=8, tm_mday=21, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=234, tm_isdst=-1)
3.1.5 strftime()
将元组形式的字符串按照指定格式转换成字符串形式
>>> import time
>>> time.strftime('%Y%m%d',(2016,8,21,0,0,0,6,234,0))
'20160821'
3.1.6 mktime()
讲元组形式的时间转换成从19700101累计的秒数
>>> import time
>>> time.mktime((2016,8,21,0,0,0,6,234,0))
1471708800.0
3.2 Eirc与Qt Designer的使用
本部分结合项目编写一起讲解。
3.3Qt中添加matplotlib组件窗口
在Qt中添加matplotlib组件窗口需要创建一个新的类mplwidget,在这个类中创建matplotlib的画布,然后在Qt designer中添加一个普通的Widget,然后将这个widget提升为我们所建的类mplwidget。
4.项目编写
4.1 创建项目
- 打开Eric,单击菜单栏【项目】-【新建】
输入“项目名称”,选择“项目文件夹”,点击【OK】
4.2创建窗体
- 在Eric“项目浏览器”的“窗体”中,单击右键,选择【新建窗体】
- 选择窗体类型“主窗口”,点击【OK】
- 输入窗体文件名,点击【Save】
- 在项目浏览器中,右键点击新建的.ui窗体文件,选择【在Qt设计师中打开】
- 打开Qt Designer后,会有几个基本的窗口,你自己的窗口“MainWindow”、“窗口部件盒”、“对象查看器”、“属性编辑器”,其他的窗口可从菜单栏“视图”窗口选择。
拖拽“MainWindows”设置窗口的初始大小
从“窗口部件盒”拖4个Widget到“MainWindow”
- 在“MainWindow”4个Widget以外的地方单击右键,选择【布局】-【水平布局】
- 在一个Widget上单击右键,选择【提升为】
- 在“提升的类名称”中输入要创建的自定义的widget类名称,点击【添加】
- 选中“提升的类”中新建的那个类,点击【提升】
- 选中Widget组件,在右侧的“属性编辑器”中将objectName改为mpl···Widget
- 保存文件,退出Qt Designer。
- 右击Eric“项目浏览器”中的.ui窗体文件,选择【编译窗体】,生成文件Ui_countdownmainwindow.py
打开生成的文件,将from mplpiewidget import MplPieWidget
剪切至class Ui_MainWindow(object):
上面,保存文件。
- 单击Eric工具栏新建按钮,创建一个空白文档,保存为名为‘mplpiewidget.py’的文件。
- 伪代码
# 导入PyQt5的图形界面组件模块QtGui,非图形类模块QtCore,基础界面控件模块QtWidg