python - pyqt数字时钟

 用pyqt5实现一个简易的数字时钟


python - pyqt数字时钟_第1张图片

时钟功能

  计时,开始与暂停,刷新并返回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_())

 

你可能感兴趣的:(python)