利用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实现批量读取图片并存入mongodb数据库的方法示例
Apr 02 Python
查看python下OpenCV版本的方法
Aug 03 Python
基于python实现KNN分类算法
Apr 23 Python
Python Request爬取seo.chinaz.com百度权重网站的查询结果过程解析
Aug 13 Python
Python利用matplotlib绘制约数个数统计图示例
Nov 26 Python
Python统计时间内的并发数代码实例
Dec 28 Python
python 解决tqdm模块不能单行显示的问题
Feb 19 Python
python继承threading.Thread实现有返回值的子类实例
May 02 Python
pytorch 查看cuda 版本方式
Jun 23 Python
Python如何定义有可选参数的元类
Jul 31 Python
Pandas替换及部分替换(replace)实现流程详解
Oct 12 Python
在python中对于bool布尔值的取反操作
Dec 11 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下利用curl判断远程文件是否存在的实现代码
2011/10/08 PHP
无需重新编译php加入ftp扩展的解决方法
2013/02/07 PHP
PHP实现用户异地登录提醒功能的方法【基于thinkPHP框架】
2018/03/15 PHP
Textarea根据内容自适应高度
2013/10/28 Javascript
JS实现让访问者自助选择网页文字颜色的方法
2015/02/24 Javascript
基于jQuery实现的双11天猫拆红包抽奖效果
2015/12/01 Javascript
在Web项目中引入Jquery插件报错的完美解决方案(图解)
2016/09/19 Javascript
简单理解js的冒泡排序
2016/12/19 Javascript
基本DOM节点操作
2017/01/17 Javascript
使用jquery datatable和bootsrap创建表格实例代码
2017/03/17 Javascript
vue中用H5实现文件上传的方法实例代码
2017/05/27 Javascript
Nodejs进阶之服务端字符编解码和乱码处理
2017/09/04 NodeJs
node.js学习之断言assert的使用示例
2017/09/28 Javascript
Vue.js 实现微信公众号菜单编辑器功能(二)
2018/05/08 Javascript
详解Angular中实现自定义组件的双向绑定的两种方法
2018/11/23 Javascript
JS实现checkbox互斥(单选)功能示例
2019/05/04 Javascript
ES6中Promise的使用方法实例总结
2020/02/18 Javascript
javascript设计模式 ? 访问者模式原理与用法实例分析
2020/04/26 Javascript
[07:52]2014DOTA2 TI逗比武士游V社解说背后的故事
2014/07/10 DOTA
Python参数类型以及常见的坑详解
2019/07/08 Python
详解Python3 中的字符串格式化语法
2020/01/15 Python
pycharm 关掉syntax检查操作
2020/06/09 Python
python Scrapy爬虫框架的使用
2021/01/21 Python
西班牙第一的网上药房:PromoFarma.com
2017/04/17 全球购物
美国女性运动零售品牌:Lady Foot Locker
2017/05/12 全球购物
Maxpeedingrods美国:高性能汽车零件
2020/02/14 全球购物
DELPHI面试题研发笔试试卷
2015/11/08 面试题
制药工程专业个人求职自荐信
2014/01/25 职场文书
中文师范生自荐信
2014/01/30 职场文书
企业军训感言
2014/02/08 职场文书
《难忘的泼水节》教学反思
2014/02/27 职场文书
2014年打非治违工作总结
2014/11/13 职场文书
2015年信息化建设工作总结
2015/07/23 职场文书
表扬稿表扬信的格式及范文
2019/06/24 职场文书
创业计划书之冷饮店
2019/09/27 职场文书
CSS实现渐变色边框(Gradient borders)的5种方法
2022/03/25 HTML / CSS