利用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 相关文章推荐
Python中的startswith和endswith函数使用实例
Aug 25 Python
python搭建微信公众平台
Feb 09 Python
Django中利用filter与simple_tag为前端自定义函数的实现方法
Jun 15 Python
Python基础之getpass模块详细介绍
Aug 10 Python
Python 实现购物商城,含有用户入口和商家入口的示例
Sep 15 Python
TensorFlow高效读取数据的方法示例
Feb 06 Python
Python实现去除列表中重复元素的方法小结【4种方法】
Apr 27 Python
python实现简单日期工具类
Apr 24 Python
Python玩转PDF的各种骚操作
May 06 Python
PyTorch预训练的实现
Sep 18 Python
实现Python与STM32通信方式
Dec 18 Python
如何在Python 游戏中模拟引力
Mar 27 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
PHP脚本的10个技巧(4)
2006/10/09 PHP
浅析php中抽象类和接口的概念以及区别
2013/06/27 PHP
浅析php fwrite写入txt文件的时候用 \r\n不能换行的问题
2013/08/06 PHP
PHP内置的Math函数效率测试
2014/12/01 PHP
PHP实现的多文件上传类及用法示例
2016/05/06 PHP
PHP学习记录之常用的魔术常量详解
2019/12/12 PHP
Jquery 扩展方法
2010/05/06 Javascript
JavaScript 匿名函数(anonymous function)与闭包(closure)
2011/10/04 Javascript
浅谈JavaScript中的Math.atan()方法的使用
2015/06/14 Javascript
jQuery中的insertBefore(),insertAfter(),after(),before()区别介绍
2016/09/01 Javascript
解决Window10系统下Node安装报错的问题分析
2016/12/13 Javascript
利用iscroll4实现轮播图效果实例代码
2017/01/11 Javascript
vue父子组件的数据传递示例
2017/03/07 Javascript
js获取json中key所对应的value值的简单方法
2020/06/17 Javascript
简单实现JS上传图片预览功能
2017/04/14 Javascript
解决ionic和angular上拉加载的问题
2017/08/03 Javascript
js中let和var定义变量的区别
2018/02/08 Javascript
vue生命周期与钩子函数简单示例
2019/03/13 Javascript
微信小程序引入Vant组件库过程解析
2019/08/06 Javascript
vue data对象重新赋值无效(未更改)的解决方式
2020/07/24 Javascript
基于vue 动态菜单 刷新空白问题的解决
2020/08/06 Javascript
利用Python批量压缩png方法实例(支持过滤个别文件与文件夹)
2017/07/30 Python
Python3 批量扫描端口的例子
2019/07/25 Python
python flask web服务实现更换默认端口和IP的方法
2019/07/26 Python
python opencv 简单阈值算法的实现
2019/08/04 Python
python 视频逐帧保存为图片的完整实例
2019/12/10 Python
Python检测端口IP字符串是否合法
2020/06/05 Python
python 如何使用find和find_all爬虫、找文本的实现
2020/10/16 Python
python基于selenium爬取斗鱼弹幕
2021/02/20 Python
全球领先的鞋类零售商:The Walking Company
2016/07/21 全球购物
美国名表在线商城:Ashford(支持中文)
2019/09/24 全球购物
函授本科毕业生自我鉴定
2013/10/16 职场文书
员工晚婚的请假条
2014/02/08 职场文书
导航工程专业自荐信
2014/09/02 职场文书
合法的离婚协议书范本
2014/10/23 职场文书
python 网络编程要点总结
2021/06/18 Python