利用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 相关文章推荐
python3使用tkinter实现ui界面简单实例
Jan 10 Python
Python中字符编码简介、方法及使用建议
Jan 08 Python
python在指定目录下查找gif文件的方法
May 04 Python
使用Python3制作TCP端口扫描器
Apr 17 Python
用virtualenv建立多个Python独立虚拟开发环境
Jul 06 Python
Python装饰器用法实例总结
Feb 07 Python
matplotlib实现热成像图colorbar和极坐标图的方法
Dec 13 Python
python中enumerate() 与zip()函数的使用比较实例分析
Sep 03 Python
Python数组并集交集补集代码实例
Feb 18 Python
详解Pycharm出现out of memory的终极解决方法
Mar 03 Python
Python json模块与jsonpath模块区别详解
Mar 05 Python
基于python爬取梨视频实现过程解析
Nov 09 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 dirname(__FILE__) 获取当前文件的绝对路径
2011/06/28 PHP
深入Nginx + PHP 缓存详解
2013/07/11 PHP
PHP编写daemon process详解及实例代码
2016/09/30 PHP
php使用自定义函数实现汉字分割替换功能示例
2017/01/30 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
2017/09/16 PHP
Thinkphp5+Redis实现商品秒杀代码实例讲解
2020/12/29 PHP
静态图片的十一种滤镜效果--不支持Ie7及非IE浏览器。
2007/03/06 Javascript
验证用户是否修改过页面的数据的实现方法
2008/09/26 Javascript
js 限制数字 js限制输入实现代码
2012/12/04 Javascript
javascript实现div浮动在网页最顶上并带关闭按钮效果实例
2013/08/13 Javascript
巧用jquery解决下拉菜单被Div遮挡的相关问题
2014/02/13 Javascript
JS实现仿京东淘宝竖排二级导航
2014/12/08 Javascript
jQuery实现默认是闭合的FAQ展开效果菜单
2015/09/14 Javascript
使用getBoundingClientRect方法实现简洁的sticky组件的方法
2016/03/22 Javascript
Angular.Js中过滤器filter与自定义过滤器filter实例详解
2017/05/08 Javascript
基于vue cli重构多页面脚手架过程详解
2018/01/23 Javascript
vue移动端UI框架实现QQ侧边菜单组件
2018/03/09 Javascript
vue 监听键盘回车事件详解 @keyup.enter || @keyup.enter.native
2018/08/25 Javascript
jQuery解析json格式数据示例
2018/09/01 jQuery
Vue cli3 库模式搭建组件库并发布到 npm的流程
2018/10/12 Javascript
swiper.js插件实现pc端文本上下滑动功能示例
2018/12/03 Javascript
django实现前后台交互实例
2017/08/07 Python
Python使用Matplotlib模块时坐标轴标题中文及各种特殊符号显示方法
2018/05/04 Python
Python File(文件) 方法整理
2019/02/18 Python
Python CSV文件模块的使用案例分析
2019/12/21 Python
基于python模拟TCP3次握手连接及发送数据
2020/11/06 Python
大众服装店创业计划书范文
2014/01/01 职场文书
通信生自我鉴定
2014/01/18 职场文书
法学个人求职信范文
2014/01/27 职场文书
函授自我鉴定范文
2014/02/06 职场文书
关爱残疾人标语
2014/06/25 职场文书
建筑结构施工求职信
2014/07/11 职场文书
2015年营业员工作总结
2015/04/23 职场文书
小学语文国培研修日志
2015/11/13 职场文书
详解jQuery的核心函数和事件处理
2022/02/18 jQuery
Python时间操作之pytz模块使用详解
2022/06/14 Python