25行代码的弹出式闹钟
- 控制台启动
- 可以根据设置选择是否添加标题栏,菜单,关闭按钮,默认不采用
# -*- coding: utf-8 -*-
# @Date : 2018/5/6 13:16
# @Author : yw
import time
import sys
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
if __name__ == "__main__":
app = QApplication(sys.argv) # 每一个PyQt应用都必须有一个QApplication对象
try:
due = QTime.currentTime() # 获取当前系统的事件
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.py HH:MM [optional message]"
while QTime.currentTime() < due: # 当前时间与目标时间做比较
time.sleep(20)
lb1 = QLabel("<font color=red size=72><b>" + message + "</b></font>") # 传入HTML标签定义消息显示红色, 72point, 加黑
lb1.setWindowFlags(Qt.SplashScreen) # 采取标题栏, 设置闪屏模式
lb1.show()
QTimer.singleShot(60000, app.quit) # 设置单次计时器, 时间到后调用传入的方法
sys.exit(app.exec_())
lb1.setWindowFlags(Qt.SplashScreen)
#lb1.setWindowFlags(Qt.SplashScreen)
30行代码的表达式求值
- [ ] 一个没有父类的窗口部件就会是顶级窗口,而一个有父类的窗口部件就会被包含(或显示)它的父类中,PyQt采取父子拥有权模型来确保如果一个父类被(例如一个顶级窗口)被删除,那么它的所有孩子,即该窗口的所包含的全部窗口部件都应当全部被自动删除。
- [ ] 大多数PyQt QObject子类都会在其构造函数中的最后一个参数处带一个父类对象。但对于窗口部件一般不会(也不需要)传递这个参数。这是因为,对话框中的窗口部件使用布局管理器进行布局的,而一旦出现布局,各个窗口部件就会自动重定向父类,指向它们所在的布局,因而它们会自动正确地改正自己的父类而无须我们做任何其他的动作。
但是,在某些情况下,就必须明确的传递一个父对象。例如创建那些不是窗口部件的QObject子对象时,或者是在创建一些不进行布局的窗口部件时。
from __future__ import division
from math import *
import sys
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
class Form(QDialog):
def __init__(self, parent=None):
super().__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)
self.lineedit.setFocus() # 将初始字符设置焦点
self.lineedit.returnPressed.connect(self.UpdateUI) # 信号槽 按下回车便连接函数
self.setWindowTitle("Calculate")
def UpdateUI(self):
try:
text = self.lineedit.text()
self.browser.append("%s = <b>%s</b>" % (text, eval(text)))
except:
self.browser.append("<font color=red >%s is invalid! </font>" % text)
if __name__ == "__main__":
app = QApplication(sys.argv) # 每一个PyQt应用都必须有一个QApplication对象
form = Form()
form.show()
sys.exit(app.exec_())