zoukankan      html  css  js  c++  java
  • 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模块的介绍了。

    现在把所有的句子放在一起。让我们测试下。

    image

    当我们输入一个错误的时间,系统提示错误。

    image

    输入正确的时间后程序运行正常。

    附录: 完整程序

    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_()
  • 相关阅读:
    跟着百度学PHP[6]超级全局变量
    DuBrute 3.1
    第三方提权之serv-u提权
    报错注入分析之Extractvalue分析
    报错注入分析之updatexml注入
    B/S与C/S架构
    Python IDLE背景设置与使用
    调试软件的基本方法
    Windows10下安装python(配置环境变量)
    磁盘分区
  • 原文地址:https://www.cnblogs.com/Kaysin/p/2910071.html
Copyright © 2011-2022 走看看