PyQt5学习笔记

定时跳出弹窗小程序

"""
    功能:20行的弹出式闹钟
    时间:2020/1/31
    作者:江南飘雪的小作坊
"""

# 注意:此程序如果直接运行,sys.argv的参数的长度始终是1,因此,始终显示ValueError
# 需在终端中使用 python alert.py 16:00 WakeUp 命令执行,其中16:00是用户自定义时间,而WakeUp是用户自定义闹钟显示的内容

# 导入sys模块,因为要访问包含在sys.argv列表中的一些命令参数
import sys
import time
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *

# 创建QApplication对象,每一个PyQt GUI应用程序都对应一个对象
# 传入一个参数
app = QApplication(sys.argv)

try:
    # 设置due变量值为现在时间
    due = QTime.currentTime()
    message = "Alert!"
    # 如果用户没有给出至少哪怕一个的命令行参数值(时间),就抛出ValueError异常
    # print(sys.argv)
    # print(len(sys.argv))
    if len(sys.argv) < 2:
        raise ValueError
    # 如果第一个参数不含冒号,就尝试调用split()将两个元素解包时,就触发一个ValueError异常
    hours, mins = sys.argv[1].split(":")
    # 如果小时数和分钟数不是有效数字(通过int()判断),以及超限,导致成无效的QTime,便触发一个ValueError
    due = QTime(int(hours), int(mins))
    if not due.isValid():
        raise ValueError
    # 如果time参数有效,便在之前的message基础上在拼接其他命令行参数
    if len(sys.argv) > 2:
        message = " ".join(sys.argv[2:])
except ValueError:
    message = "Usage: alert.py HH:MM [optional message]"

# # 循环比较系统时间与目标时间
while QTime.currentTime() < due:
    time.sleep(20)

label = QLabel("" + message + "")
# 闪频模式,没有标题栏
label.setWindowFlags(Qt.SplashScreen)
label.show()
# 单次定时器,python库的time.sleep()函数使用时间是秒
# Qtimer.singleShot()函数使用的是毫秒,两个参数,一个是时间,一个是到时调用的函数
QTimer.singleShot(60000, app.quit)
app.exec()

注意:如果使用pycharm安装的PyQt5,且安装包的路径并不是系统python包的默认路径,在电脑终端中输入执行文件命令时,会出现未找到PyQt5模块的提示,此时解决方法有两个,一是把pycharm中安装包复制到系统python包的默认路径中;其次是利用pycharm中的Terminal终端执行命令。

计算器工具

"""
    功能:进行普通的计算功能
    时间:2020/1/31
    作者:江南飘雪的小作坊
"""

import sys
from PyQt5.QtWidgets import *
# 分别要用到的模块:QApplication,QDialog,QTextBrowser,QLineEdit,QVBoxLayout

#继承QDialog获得空白表单form
class Form(QDialog):
    #父类为None,变成顶级窗口,利用super进行初始化
    def __init__(self, parent=None):
        super(Form, self).__init__(parent)
        # 文本框实例化
        self.browser = QTextBrowser()
        #初始文本,并且设置初始时文本是全部选中的
        self.lineedit = QLineEdit("Type an expression and press Enter")
        self.lineedit.selectAll()
        # 布局实例化,并加入窗口部件
        layout = QVBoxLayout()
        layout.addWidget(self.browser)
        layout.addWidget(self.lineedit)
        #布局进行设置
        self.setLayout(layout)
        #设置光标位置在lineedit
        self.lineedit.setFocus()
        # pyqt5的新方法,lineedit响应按下去动作,立即调用updateUi方法(绑定事件);
        # 在pyqt4中采用 self.connect(self.lineedit, SIGNAL("returnPressed()", self.updateUi)
        self.lineedit.returnPressed.connect(self.updateUi)
        # 设置标题Calculate
        self.setWindowTitle("Calculate")
        # 设置窗口大小
        self.resize(500,400)

    # 定义updateUi函数
    def updateUi(self):
        try:
            # 获取lineedit的文本,并传给self.brower
            text = self.lineedit.text()
            # 调用eval()方法进行计算
            self.browser.append("{} = {}".format(text, eval(text)))
        except:
            self.browser.append("{} is invalid!".format(text))

app = QApplication(sys.argv)
form = Form()
form.show()
app.exec_()
  • 这里有个 eval()python的内建函数,需要特殊说明,详细说明请参见Python3内置函数-eval()。
  • 简要来说,eval()可以实现两个功能,如果传入的参数是两个字符串,那么它会输出两个字符串的计算值;如果传入的参数是一个字符,比如"1",它输出1,此功能相当于int()

你可能感兴趣的:(GUI)