利用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 相关文章推荐
基于asyncio 异步协程框架实现收集B站直播弹幕
Sep 11 Python
Python实现霍夫圆和椭圆变换代码详解
Jan 12 Python
pyside+pyqt实现鼠标右键菜单功能
Dec 08 Python
通过python实现随机交换礼物程序详解
Jul 10 Python
Python使用urllib模块对URL网址中的中文编码与解码实例详解
Feb 18 Python
Python如何将函数值赋给变量
Apr 28 Python
Python Flask框架实现简单加法工具过程解析
Jun 03 Python
python如何使用代码运行助手
Jul 03 Python
解决Python paramiko 模块远程执行ssh 命令 nohup 不生效的问题
Jul 14 Python
python 调用Google翻译接口的方法
Dec 09 Python
利用Selenium添加cookie实现自动登录的示例代码(fofa)
May 08 Python
opencv深入浅出了解机器学习和深度学习
Mar 17 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自定义函数call_user_func和call_user_func_array详解
2011/07/14 PHP
php中的一些数组排序方法分享
2012/07/20 PHP
一个JavaScript继承的实现
2006/10/24 Javascript
javascript 读取图片文件的大小
2009/06/25 Javascript
为Javascript中的String对象添加去除左右空格的方法(示例代码)
2013/11/30 Javascript
js中switch case循环实例代码
2013/12/30 Javascript
node.js中的console.timeEnd方法使用说明
2014/12/09 Javascript
angularJS中router的使用指南
2015/02/09 Javascript
解决JavaScript数字精度丢失问题的方法
2015/12/03 Javascript
JavaScript组件开发完整示例
2015/12/15 Javascript
前端性能优化及技巧
2016/05/06 Javascript
浅谈javascript中new操作符的原理
2016/06/07 Javascript
angular 用拦截器统一处理http请求和响应的方法
2017/06/08 Javascript
详解JS构造函数中this和return
2017/09/16 Javascript
js插件实现图片滑动验证码
2020/09/29 Javascript
jQuery实现手机号正则验证输入及自动填充空格功能
2018/01/02 jQuery
[00:12]2018DOTA2亚洲邀请赛 Sccc亮相SOLO赛,今年他又会有什么样的战绩?
2018/04/06 DOTA
[27:08]完美世界DOTA2联赛PWL S2 SZ vs Rebirth 第二场 11.21
2020/11/23 DOTA
[07:37]DOTA2-DPC中国联赛2月2日Recap集锦
2021/03/11 DOTA
python控制台显示时钟的示例
2014/02/24 Python
使用Python导出Excel图表以及导出为图片的方法
2015/11/07 Python
OpenCV实现人脸识别
2017/04/07 Python
Django中的Model操作表的实现
2018/07/24 Python
[机器视觉]使用python自动识别验证码详解
2019/05/16 Python
python提取log文件内容并画出图表
2019/07/08 Python
Python 调用 Windows API COM 新法
2019/08/22 Python
5分钟快速掌握Python定时任务框架的实现
2021/01/26 Python
python工具快速为音视频自动生成字幕(使用说明)
2021/01/27 Python
英国人最爱的饰品网站:Accessorize
2016/08/22 全球购物
怀旧香味蜡烛:Homesick
2019/11/02 全球购物
linux下进程间通信的方式
2013/01/23 面试题
个人欠款担保书
2014/05/20 职场文书
国家税务局领导班子对照检查材料思想汇报
2014/10/04 职场文书
2015圣诞节贺卡寄语
2015/03/24 职场文书
莫言诺贝尔获奖感言(全文)
2015/07/31 职场文书
Nginx设置HTTPS的方法步骤 443证书配置方法
2022/03/21 Servers