计时,开始与暂停,刷新并返回csdn访问量
PyQt5:
pyqt应用:QApplication
窗口:QWidget
按钮:QPushButton
LCD数字:QLCDNumber(这是个好东西)
原件的布局:QVBoxLayout
时间相关:QTime, QTimer
爬虫:
爬取网页:urlopen
解析网页信息:Beautifulsoup
import sys
'''用于制作时钟界面'''
from PyQt5.QtCore import QCoreApplication, QTime, QTimer
from PyQt5.QtWidgets import (QLCDNumber, QWidget, QPushButton,
QVBoxLayout, QApplication)
'''用于爬取访问量'''
from bs4 import BeautifulSoup
from urllib.request import urlopen
1.需求分析:
首先需要创建一个合适的窗口:
-Pause按钮用于暂停与开始
-- 需要一个按钮,以及绑定一个按钮触发的函数
-中间的窗口用于显示时间
--需要一个显示时间的原件
-下部的visit显示博客的实时访问量
--需要一个按钮,以及绑定一个按钮触发的函数
--需要一个简单的爬虫
2.根据需求设计程序框架
class StudyClock(QWidget):
#构造函数
def __init__(self):
#生成界面
def initUI(self):
#显示时间
def showTime(self):
#暂停与开始按钮
def pbtnClicked(self):
#访问量按钮
def qbtnReset(self):
3.代码实现:
首先我们应该实现窗口和窗口内的各种元件,所以首先实现initUI(self)函数
创建窗口:
#窗口大小
self.setGeometry(300, 300, 250, 200)
#窗口标题
self.setWindowTitle('Study Clock')
#显示窗口
self.show()
三个元件:(两个按钮和显示时间)
'''显示时间'''
#创建元件
self.lcd = QLCDNumber(self)
#设置为显示五个字符
self.lcd.setDigitCount(5)
'''访问量按钮'''
#创建按钮
self.qbtn = QPushButton('0', self)
#与qbtnReset函数绑定
self.qbtn.clicked.connect(self.qbtnReset)
'''暂停按钮'''
self.pbtn = QPushButton('Pause', self)
self.pbtn.clicked.connect(self.pbtnClicked)
窗口布局:(自上而下)
vbox = QVBoxLayout()
vbox.addWidget(self.pbtn)
vbox.addWidget(self.lcd)
vbox.addWidget(self.qbtn)
self.setLayout(vbox)
利用计时器:每一秒更新一次(调用一次showTime函数)
self.timer = QTimer(self)
#一次刷新会调用一次showTime函数
self.timer.timeout.connect(self.showTime)
#一秒钟更新一次
self.timer.start(1000)
小时,分钟,秒钟
self.h = 0
self.m = 0
self.s = 0
然后分别实现三个函数(暂停按钮,访问量按钮,时间显示)
这里利用了一个flag来判断状态,若self.flag == 1则是没有暂停,反之则是暂停状态
show函数:
def showTime(self):
'''每秒自增'''
if self.flag == 1:
self.s = self.s + 1
if(self.s == 60):
self.s = 0
self.m = self.m + 1
if(self.m == 60):
self.m = 0
self.h = self.h + 1
'''创建时间字符串'''
time = QTime(self.h, self.m, self.s)
text = time.toString('hh:mm')
'''打印时间(每隔一秒中间的' : '号会闪一下'''
if time.second() % 2 == 0:
text = text[:2] + ' ' + text[3:]
#print(text)
self.lcd.display(text)
'''每五秒爬取一次访问量'''
if self.m % 5 == 0 and self.s == 1:
self.qbtnReset();
pbtnClicked函数(暂停和开始按钮)
def pbtnClicked(self):
#暂停或开始,根据flag控制暂停和开始
if self.flag:
self.flag = 0
self.pbtn.setText("Start")
else :
self.flag = 1
self.pbtn.setText("Pause")
qbtnReset函数:(访问量爬虫)
记得更改urlopem()里面的链接为你的博客主页的链接
def qbtnReset(self):
'''爬取下网页'''
html = urlopen(
"https://blog.csdn.net/Kprogram")
html = html.read().decode('utf-8')
'''处理网页信息,找到访问量'''
soup = BeautifulSoup(html, features='lxml')
hrlf = soup.find('div', {"class": "grade-box clearfix"})
dts = hrlf.find_all('dl')
vst = dts[1].find('dd').get_text().strip()
#根据访问量设置按钮名字
self.qbtn.setText("visit: "+vst)
最后加上构造函数,以及实例化pyqt对象
完整代码:
# -*- coding: utf-8 -*-
import sys
from bs4 import BeautifulSoup
from urllib.request import urlopen
from PyQt5.QtCore import QCoreApplication, QTime, QTimer
from PyQt5.QtWidgets import (QLCDNumber, QWidget, QPushButton,
QVBoxLayout, QApplication)
class StudyClock(QWidget):
def __init__(self):
super().__init__()
self.initUI()
#为零时表暂停
self.flag = 1
def initUI(self):
#窗口信息
self.setGeometry(300, 300, 250, 200)
self.setWindowTitle('Study Clock')
self.show()
#显示时间的元件
self.lcd = QLCDNumber(self)
#设置为显示五个字符
self.lcd.setDigitCount(5)
#访问量按钮
self.qbtn = QPushButton('0', self)
self.qbtn.clicked.connect(self.qbtnReset)
#暂停按钮
self.pbtn = QPushButton('Pause', self)
self.pbtn.clicked.connect(self.pbtnClicked)
#放成一列
vbox = QVBoxLayout()
vbox.addWidget(self.pbtn)
vbox.addWidget(self.lcd)
vbox.addWidget(self.qbtn)
self.setLayout(vbox)
#利用计时器每一秒打印时间
self.timer = QTimer(self)
self.timer.timeout.connect(self.showTime)
self.timer.start(1000)
#小时,分钟,秒钟
self.h = 0
self.m = 0
self.s = 0
def showTime(self):
#每秒自增
if self.flag == 1:
self.s = self.s + 1
if(self.s == 60):
self.s = 0
self.m = self.m + 1
if(self.m == 60):
self.m = 0
self.h = self.h + 1
#创建时间字符串
time = QTime(self.h, self.m, self.s)
text = time.toString('hh:mm')
#打印时间(每隔一秒中间的' : '号会闪一下
if time.second() % 2 == 0:
text = text[:2] + ' ' + text[3:]
#print(text)
self.lcd.display(text)
#爬取访问量
if self.m % 5 == 0 and self.s == 1:
self.qbtnReset();
def pbtnClicked(self):
#暂停或开始
if self.flag:
self.flag = 0
self.pbtn.setText("Start")
else :
self.flag = 1
self.pbtn.setText("Pause")
def qbtnReset(self):
html = urlopen(
"https://blog.csdn.net/Kprogram")
html = html.read().decode('utf-8')
soup = BeautifulSoup(html, features='lxml')
hrlf = soup.find('div', {"class": "grade-box clearfix"})
dts = hrlf.find_all('dl')
vst = dts[1].find('dd').get_text().strip()
self.qbtn.setText("visit: "+vst)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = StudyClock()
sys.exit(app.exec_())