利用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实现多线程下载文件的代码实例
Jun 01 Python
python导出chrome书签到markdown文件的实例代码
Dec 27 Python
使用pandas把某一列的字符值转换为数字的实例
Jan 29 Python
pycharm访问mysql数据库的方法步骤
Jun 18 Python
win10下安装Anaconda的教程(python环境+jupyter_notebook)
Oct 23 Python
Python模块future用法原理详解
Jan 20 Python
django实现将修改好的新模型写入数据库
Mar 31 Python
Django静态资源部署404问题解决方案
May 11 Python
Python 获取异常(Exception)信息的几种方法
Dec 29 Python
python中四舍五入的正确打开方式
Jan 18 Python
Python实现微信表情包炸群功能
Jan 28 Python
windows安装python超详细图文教程
May 21 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 Document 代码注释规范
2009/04/13 PHP
phpMyAdmin链接MySql错误 个人解决方案
2009/12/28 PHP
PHP XML error parsing SOAP payload on line 1
2010/06/17 PHP
手把手教你打印出PDF(关于fpdf的简单应用)
2013/06/25 PHP
thinkphp特殊标签用法概述
2014/11/24 PHP
PHP发送短信代码分享
2015/08/11 PHP
php图片添加文字水印实现代码
2016/03/15 PHP
PHP从数组中删除元素的四种方法实例
2017/05/12 PHP
PHP中cookie知识点学习
2018/05/06 PHP
Prototype使用指南之range.js
2007/01/10 Javascript
实现超用户体验 table排序javascript实现代码
2009/06/22 Javascript
说说JSON和JSONP 也许你会豁然开朗
2012/09/02 Javascript
AngularJS ng-controller 指令简单实例
2016/08/01 Javascript
使用jquery datatable和bootsrap创建表格实例代码
2017/03/17 Javascript
Angular.js中上传指令ng-upload的基本使用教程
2017/07/30 Javascript
基于layui轮播图满屏是高度自适应的解决方法
2019/09/16 Javascript
JS数组方法reduce的用法实例分析
2020/03/03 Javascript
JavaScript find()方法及返回数据实例
2020/04/30 Javascript
Python数据类型学习笔记
2016/01/13 Python
python多线程socket编程之多客户端接入
2017/09/12 Python
pandas 快速处理 date_time 日期格式方法
2018/11/12 Python
pytorch数据预处理错误的解决
2020/02/20 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
2020/03/10 Python
浅谈python处理json和redis hash的坑
2020/07/16 Python
python中的测试框架
2020/11/13 Python
django项目中使用云片网发送短信验证码的实现
2021/01/19 Python
英国在线药房和在线药剂师:Chemist 4 U
2020/01/05 全球购物
银行演讲稿范文
2014/01/03 职场文书
年级组长自我鉴定
2014/02/22 职场文书
小学数学课后反思
2014/04/23 职场文书
2014年群众路线党员自我评议
2014/09/24 职场文书
2014年幼儿园后勤工作总结
2014/11/10 职场文书
2014年医院科室工作总结
2014/12/20 职场文书
2015年煤矿安全工作总结
2015/05/23 职场文书
2019XX公司员工考核管理制度!
2019/08/07 职场文书
Python Pandas模块实现数据的统计分析的方法
2021/06/24 Python