利用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 07 Python
pandas进行数据的交集与并集方式的数据合并方法
Jun 27 Python
浅析python继承与多重继承
Sep 13 Python
Python编程flask使用页面模版的方法
Dec 28 Python
Python 多维List创建的问题小结
Jan 18 Python
关于python中密码加盐的学习体会小结
Jul 15 Python
Pytest框架之fixture的详细使用教程
Apr 07 Python
keras实现多种分类网络的方式
Jun 11 Python
Python编写单元测试代码实例
Sep 10 Python
python接口自动化框架实战
Dec 23 Python
Jupyter Notebook 远程访问配置详解
Jan 11 Python
如何用python实现一个HTTP连接池
Jan 14 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
关于时间计算的结总
2006/12/06 PHP
Yii2中Restful API原理实例分析
2016/07/25 PHP
php array_map使用自定义的函数处理数组中的每个值
2016/10/26 PHP
基于jQuery的倒计时实现代码
2012/05/30 Javascript
JS实现图片预加载无需等待
2012/12/21 Javascript
Json字符串转换为JS对象的高效方法实例
2013/05/01 Javascript
js函数返回多个返回值的示例代码
2013/11/05 Javascript
javascript移动开发中touch触摸事件详解
2016/03/18 Javascript
原生和jQuery的ajax用法详解
2017/01/23 Javascript
nodejs基础知识
2017/02/03 NodeJs
基于Datatables跳转到指定页的简单实例
2017/11/09 Javascript
详解如何在React组件“外”使用父组件的Props
2018/01/12 Javascript
微信小程序实现列表下拉刷新上拉加载
2020/07/29 Javascript
详解Vue 匿名、具名和作用域插槽的使用方法
2019/04/22 Javascript
vue中根据时间戳判断对应的时间(今天 昨天 前天)
2019/12/20 Javascript
JS中多层次排序算法的实现代码
2021/01/06 Javascript
Python实现处理管道的方法
2015/06/04 Python
JPype实现在python中调用JAVA的实例
2017/07/19 Python
Python中的函数式编程:不可变的数据结构
2018/10/08 Python
Django中使用Celery的方法示例
2018/11/29 Python
使用python判断你是青少年还是老年人
2018/11/29 Python
python实现K近邻回归,采用等权重和不等权重的方法
2019/01/23 Python
手把手教你使用Python创建微信机器人
2019/04/29 Python
python网络编程 使用UDP、TCP协议收发信息详解
2019/08/29 Python
python pygame实现滚动横版射击游戏城市之战
2019/11/25 Python
Django实现celery定时任务过程解析
2020/04/21 Python
python压包的概念及实例详解
2021/02/17 Python
css3 响应式媒体查询的示例代码
2019/09/25 HTML / CSS
HTML5 Canvas 绘图——使用 Canvas 绘制图形图文教程 使用html5 canvas 绘制精美的图
2015/08/31 HTML / CSS
应届医学毕业生求职信分享
2013/12/02 职场文书
新书吧创业计划书
2014/01/31 职场文书
大学生就业意向书
2015/05/11 职场文书
情侣之间的道歉短信
2015/05/12 职场文书
MySql开发之自动同步表结构
2021/05/28 MySQL
教你使用TensorFlow2识别验证码
2021/06/11 Python
go使用Gin框架利用阿里云实现短信验证码功能
2021/08/04 Golang