利用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中函数的参数
Apr 27 Python
Python复制文件操作实例详解
Nov 10 Python
Python抓取框架Scrapy爬虫入门:页面提取
Dec 01 Python
python实现超简单的视频对象提取功能
Jun 04 Python
python中字符串内置函数的用法总结
Sep 13 Python
对Python 窗体(tkinter)树状数据(Treeview)详解
Oct 11 Python
python实现从pdf文件中提取文本,并自动翻译的方法
Nov 28 Python
基于Python快速处理PDF表格数据
Jun 03 Python
使用python实现名片管理系统
Jun 18 Python
一文解决django 2.2与mysql兼容性问题
Jul 15 Python
django使用graphql的实例
Sep 02 Python
详解Python为什么不用设计模式
Jun 24 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
常用星际术语索引(新手指南)
2020/03/04 星际争霸
php实现仿写CodeIgniter的购物车类
2015/07/29 PHP
PHP QRCODE生成彩色二维码的方法
2016/05/19 PHP
IE 缓存策略的BUG的解决方法
2007/07/21 Javascript
javascript实现炫酷的拖动分页
2015/05/11 Javascript
JS中的Replace方法使用经验分享
2015/05/20 Javascript
Backbone.js框架中简单的View视图编写学习笔记
2016/02/14 Javascript
jQuery zTree加载树形菜单功能
2016/02/25 Javascript
三种带箭头提示框总结实例
2016/06/14 Javascript
解决bootstrap导航栏navbar在IE8上存在缺陷的方法
2016/07/01 Javascript
Node.js编写CLI的实例详解
2017/05/17 Javascript
JS实现下拉菜单列表与登录注册弹窗效果
2017/08/10 Javascript
three.js实现3D模型展示的示例代码
2017/12/31 Javascript
详解node child_process模块学习笔记
2018/01/24 Javascript
JavaScript继承的特性与实践应用深入详解
2018/12/30 Javascript
谈谈JavaScript中super(props)的重要性
2019/02/12 Javascript
php结合js实现多条件组合查询
2019/05/28 Javascript
vue自定义正在加载动画的例子
2019/11/14 Javascript
vue 开发之路由配置方法详解
2019/12/02 Javascript
vue开发chrome插件,实现获取界面数据和保存到数据库功能
2020/12/01 Vue.js
python实现网页链接提取的方法分享
2014/02/25 Python
Python时间的精准正则匹配方法分析
2017/08/17 Python
python with提前退出遇到的坑与解决方案
2018/01/05 Python
浅述python2与python3的简单区别
2018/09/19 Python
Windows 8.1 64bit下搭建 Scrapy 0.22 环境
2018/11/18 Python
使用TensorFlow-Slim进行图像分类的实现
2019/12/31 Python
python标准库OS模块详解
2020/03/10 Python
在python3.64中安装pyinstaller库的方法步骤
2020/06/02 Python
Dyson戴森波兰官网:Dyson.pl
2019/08/05 全球购物
小学教师办公室制度
2014/02/03 职场文书
机关作风建设工作总结
2014/10/23 职场文书
办公用品质量保证书
2015/05/11 职场文书
竞选稿之小学班干部
2019/10/31 职场文书
MySQL数据迁移相关总结
2021/04/29 MySQL
SpringBoot+VUE实现数据表格的实战
2021/08/02 Java/Android
Python Matplotlib绘制条形图的全过程
2021/10/24 Python