Python Rapid GUI Programming 第一篇。 25行写一个奇葩的闹钟。Python 基础教程
今天我们开个小差不看 《可爱的Python》。
推荐一本书 《Rapid GUI Programming with Python and Qt 》 网上英文版下载一大堆,大家可以自己去找。
今天我们讲一下里面第一个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]" # 24hr clock
其中包含了异常处理,对于一个应用程序,我们应该将所有的异常情况都考虑进去。
程序中使用raise 来触发异常。迫使程序进入我们的预想轨道。
显然,上面的程序是不够的,它并没有时间判断和GUI部分。
如何判断时间是否到了呢,我们给出一个不是特别准确的方法,定时判断。
import time while QTime.currentTime() < due: time.sleep(20) # 20 seconds
当时间到了我们就会跳到下一步,创建一个窗体,延迟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_()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库