利用QT写一个极简单的图形化Python闹钟程序


Posted in Python onApril 07, 2015

今天我们讲一下用Python写的GUI小程序。一个小闹钟(只是屏幕提示,没有声音哦)

让我们先介绍这个闹钟如何奇葩。

需要通过命令行启动。

没有标题栏。

没菜单。

甚至没有关闭按钮。

没有运行界面。

看到这里想必大家要问了,何必去做一个这样弱爆了的程序呢。显然,教育意义大于其实际用处。

像其他的模块一样,QT界面包是需要加载的。

我们用到了命令行输入,所以,sys模块也是必须的。

用到了时间,但是我们不需要使用time模块,我们用QT提供的QTime模块。

让我们先写import 语句部分。
 

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
app = QApplication(sys.argv)

这是一个控制qt程序命脉的类,之后我们会慢慢解释。在每一个Qt程序中,都会找到类似的语句。

之后就是输入闹钟时间了。上程序。
 

try:
  message = "Alert!"
  if len(sys.argv) < 2:
    raise ValueError
  hours, mins = sys.argv[1].split(":")
  due = QTime(int(hours), int(mins))
  if not due.isValid():
    raise ValueError
  if len(sys.argv) > 2:
    message = " ".join(sys.argv[2:])
except ValueError:
  message = "Usage: alert.pyw HH:MM [optional message]"

其中包含了异常处理,对于一个应用程序,我们应该将所有的异常情况都考虑进去。

程序中使用raise 来触发异常。迫使程序进入我们的预想轨道。

显然,上面的程序是不够的,它并没有时间判断和GUI部分。

如何判断时间是否到了呢,我们给出一个不是特别准确的方法,定时判断。
 

import time
while QTime.currentTime() < due:
#休眠20秒
  time.sleep(20)

当时间到了我们就会跳到下一步,创建一个窗体,延迟60s 后关闭。
 

label = QLabel("<font color=red size=72><b>" + message + "</b></font>")
label.setWindowFlags(Qt.SplashScreen)
label.show()
QTimer.singleShot(60000, app.quit) # 1 minute
app.exec_()

看来,我们又需要写一个关于 QTime模块的介绍了。

现在把所有的句子放在一起。让我们测试下。

附完整代码:
 

import sys
import time
from PyQt4.QtCore import *
from PyQt4.QtGui import *
app = QApplication(sys.argv)
try:
  message = "Alert!"
  if len(sys.argv) < 2:
    raise ValueError
  hours, mins = sys.argv[1].split(":")
  due = QTime(int(hours), int(mins))
  if not due.isValid():
    raise ValueError
  if len(sys.argv) > 2:
    message = " ".join(sys.argv[2:])
except ValueError:
  message = "Usage: alert.pyw HH:MM [optional message]" # 24hr clock
while QTime.currentTime() < due:
  time.sleep(20) # 20 seconds
label = QLabel("<font color=red size=72><b>" + message + "</b></font>")
label.setWindowFlags(Qt.SplashScreen)
label.show()
QTimer.singleShot(60000, app.quit) # 1 minute
app.exec_()
Python 相关文章推荐
Win7上搭建Cocos2d-x 3.1.1开发环境
Jul 03 Python
python实现挑选出来100以内的质数
Mar 24 Python
浅谈Django REST Framework限速
Dec 12 Python
使用pandas模块读取csv文件和excel表格,并用matplotlib画图的方法
Jun 22 Python
Python数据持久化shelve模块用法分析
Jun 29 Python
对Python正则匹配IP、Url、Mail的方法详解
Dec 25 Python
Django之form组件自动校验数据实现
Jan 14 Python
解决python 执行sql语句时所传参数含有单引号的问题
Jun 06 Python
opencv 图像滤波(均值,方框,高斯,中值)
Jul 08 Python
Python根据字符串调用函数过程解析
Nov 05 Python
如何利用Python matplotlib绘制雷达图
Dec 21 Python
Python 避免字典和元组的多重嵌套问题
Jul 15 Python
分析Python编程时利用wxPython来支持多线程的方法
Apr 07 #Python
Python中尝试多线程编程的一个简明例子
Apr 07 #Python
Python的Flask框架中Flask-Admin库的简单入门指引
Apr 07 #Python
用Python实现一个简单的线程池
Apr 07 #Python
浅谈Python程序与C++程序的联合使用
Apr 07 #Python
浅要分析Python程序与C程序的结合使用
Apr 07 #Python
python实现根据用户输入从电影网站获取影片信息的方法
Apr 07 #Python
You might like
关于BIG5-HKSCS的解决方法
2007/03/20 PHP
ThinkPHP文件上传实例教程
2014/08/22 PHP
PHP is_array() 检测变量是否是数组的实现方法
2016/06/13 PHP
PHP操作Redis常用技巧总结
2018/04/24 PHP
top.location.href 没有权限 解决方法
2008/08/05 Javascript
JS 文字符串转换unicode编码函数
2009/05/30 Javascript
JavaScript中的prototype使用说明
2010/04/13 Javascript
Extjs中常用表单介绍与应用
2010/06/07 Javascript
几个有趣的Javascript Hack
2010/07/24 Javascript
jquery插件 autoComboBox 下拉框
2010/12/22 Javascript
返回页面顶部top按钮通过锚点实现(自写)
2013/08/30 Javascript
jquery对象和DOM对象的任意相互转换
2016/02/21 Javascript
jQuery插件FusionCharts绘制的3D环饼图效果示例【附demo源码】
2017/04/02 jQuery
聊聊JavaScript如何实现继承及特点
2017/04/07 Javascript
Angular Material Icon使用详解
2018/11/07 Javascript
详解express使用vue-router的history踩坑
2019/06/05 Javascript
详细介绍Python语言中的按位运算符
2013/11/26 Python
scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
2015/04/16 Python
python在linux系统下获取系统内存使用情况的方法
2015/05/11 Python
用tensorflow实现弹性网络回归算法
2018/01/09 Python
Flask框架web开发之零基础入门
2018/12/10 Python
Django用户认证系统 Web请求中的认证解析
2019/08/02 Python
python 比较2张图片的相似度的方法示例
2019/12/18 Python
Python使用urllib模块对URL网址中的中文编码与解码实例详解
2020/02/18 Python
获取CSDN文章内容并转换为markdown文本的python
2020/09/06 Python
基于Python爬取素材网站音频文件
2020/10/21 Python
在python3.9下如何安装scrapy的方法
2021/02/03 Python
HTML5实现文件断点续传的方法
2017/01/04 HTML / CSS
英国街头品牌:Bee Inspired Clothing
2018/02/12 全球购物
IRO美国官网:法国服装品牌
2018/03/06 全球购物
英国领先的体验日提供商:Buyagift
2019/04/19 全球购物
项目开发计划书
2014/01/09 职场文书
大学生的自我鉴定范文
2014/01/21 职场文书
亲属关系公证书
2014/04/08 职场文书
会议简讯范文
2015/07/20 职场文书
2015年小学远程教育工作总结
2015/07/28 职场文书