利用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编写爬虫小程序
May 14 Python
Python爬虫实例_城市公交网络站点数据的爬取方法
Jan 10 Python
安装python3的时候就是输入python3死活没有反应的解决方法
Jan 24 Python
python numpy 显示图像阵列的实例
Jul 02 Python
python实现祝福弹窗效果
Apr 07 Python
numpy数组做图片拼接的实现(concatenate、vstack、hstack)
Nov 08 Python
详解python opencv、scikit-image和PIL图像处理库比较
Dec 26 Python
使用Django和Postgres进行全文搜索的实例代码
Feb 13 Python
Python任务自动化工具tox使用教程
Mar 17 Python
快速解决Django关闭Debug模式无法加载media图片与static静态文件
Apr 07 Python
opencv+pyQt5实现图片阈值编辑器/寻色块阈值利器
Nov 13 Python
python 统计代码耗时的几种方法分享
Apr 02 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初学者头疼十四条问题大总结
2008/11/12 PHP
在PHP上显示JFreechart画的统计图方法
2013/11/03 PHP
PHP清除字符串中所有无用标签的方法
2014/12/01 PHP
ThinkPHP实现支付宝接口功能实例
2014/12/02 PHP
PHP面向对象编程之深入理解方法重载与方法覆盖(多态)
2015/12/24 PHP
jquery 最简单易用的表单验证插件
2010/02/27 Javascript
jQuery Pagination Ajax分页插件(分页切换时无刷新与延迟)中文翻译版
2013/01/11 Javascript
JS判断客服QQ号在线还是离线状态的方法
2015/01/13 Javascript
js制作简易年历完整实例
2015/01/28 Javascript
jQuery插件MixItUp实现动画过滤和排序
2015/04/12 Javascript
js验证真实姓名与身份证号,手机号的简单实例
2016/07/18 Javascript
jQuery插件WebUploader实现文件上传
2016/11/07 Javascript
webpack处理 css\less\sass 样式的方法
2017/08/21 Javascript
jquery.rotate.js实现可选抽奖次数和中奖内容的转盘抽奖代码
2017/08/23 jQuery
JavaScript实现的文本框placeholder提示文字功能示例
2018/07/25 Javascript
Vue框架下引入ActiveX控件的问题解决
2019/03/25 Javascript
ES6字符串的扩展实例
2020/12/21 Javascript
从零学python系列之新版本导入httplib模块报ImportError解决方案
2014/05/23 Python
Python通过websocket与js客户端通信示例分析
2014/06/25 Python
利用Python的Django框架中的ORM建立查询API
2015/04/20 Python
Python跨文件全局变量的实现方法示例
2017/12/10 Python
解决matplotlib库show()方法不显示图片的问题
2018/05/24 Python
Python实现最大子序和的方法示例
2019/07/05 Python
如何运行带参数的python脚本
2019/11/15 Python
Python如何使用函数做字典的值
2019/11/30 Python
Python urllib3软件包的使用说明
2020/11/18 Python
nohup的用法
2012/11/26 面试题
小学英语教学反思案例
2014/02/04 职场文书
公司捐款倡议书
2014/05/14 职场文书
文明城市创建标语
2014/06/16 职场文书
机关党员公开承诺书
2014/08/30 职场文书
标准大学生职业生涯规划书写作指南
2014/09/18 职场文书
个人学习党的群众路线教育实践活动心得体会
2014/11/05 职场文书
2015年宣传部个人工作总结
2015/05/14 职场文书
pytorch 一行代码查看网络参数总量的实现
2021/05/12 Python
理解python中装饰器的作用
2021/07/21 Python