zoukankan      html  css  js  c++  java
  • 【PyQt5-Qt Designer】液晶显示屏(QLCDNumber)

    液晶显示屏(QLCDNumber)

    总体介绍

    QLCDNumber小部件显示一个类似LCD的数字。

    它可以显示任何大小的数字。它可以显示十进制,十六进制,八进制或二进制数字。使用display()槽连接数据源很容易,该槽被重载以获取五种参数类型中的任何一种。

    还有一些槽函数可以用setMode()改变基数,用setSmallDecimalPoint()来改变小数点

    当QLCDNumber被要求显示超出范围的东西时,会发出overflow()信号。范围由setDigitCount()设置,但setSmallDecimalPoint()也影响它。如果显示设置为十六进制,八进制或二进制,则显示该值的整数等效值。

    这些数字和其他符号可以显示:0/O,1,2,3,4,5/S,6,7,8,9/g,减号,小数点,A,B,C,D,E, F,h,H,L,o,P,r,u,U,Y,冒号,度数符号(在字符串中单引号)和空格。 QLCDNumber将非法字符替换为空格。

    一些常用方法

    更多的介绍请见官网:QLCDNumber Class

    QLCDNumber的小例子

    先来看看具体例子的效果吧。

    部分核心代码如下:

    class Example(QWidget):
    
        def initUI(self):
    
            self.resize(370,190)
            self.setWindowTitle('关注微信公众号:学点编程吧--倒计时:LCD数字')
    
            self.lcd = QLCDNumber(self)
            lb = QLabel("距离2022年北京-张家口冬季奥林匹克运动会还有",self)
    
            self.lcd.setDigitCount(12)
            self.lcd.setMode(QLCDNumber.Dec)
            self.lcd.setSegmentStyle(QLCDNumber.Flat)#Mac系统需要加上,否则下面的color不生效。
            self.lcd.setStyleSheet("border: 2px solid black; color: red; background: silver;")
    
            time = QTimer(self)
            time.setInterval(1000)
            time.timeout.connect(self.refresh)
            time.start()
    
            self.show()
    
        def refresh(self):
            startDate = QDateTime.currentMSecsSinceEpoch()
            endDate = QDateTime(QDate(2020, 2, 4), QTime(0, 0, 0)).toMSecsSinceEpoch()
            interval = endDate - startDate
            if interval > 0:
                days = interval // (24 * 60 * 60 * 1000)
                hour = (interval - days * 24 * 60 * 60 * 1000) // (60 * 60 * 1000)
                min = (interval - days * 24 * 60 * 60 * 1000 - hour * 60 * 60 * 1000) // (60 * 1000)
                sec = (interval - days * 24 * 60 * 60 * 1000 - hour * 60 * 60 * 1000 - min * 60 * 1000) // 1000
                intervals = str(days) + ':' + str(hour) + ':' + str(min) + ':' + str(sec)
                self.lcd.display(intervals)

    代码总体不复杂,唯一需要注意的地方就是下面倒计时的计算,当然我的方法不一定最好,如果你有更好的欢迎交流。

    self.lcd = QLCDNumber(self)
    self.lcd.setDigitCount(12)
    self.lcd.setMode(QLCDNumber.Dec)
    self.lcd.setStyleSheet("border: 2px solid black; color: red; background: silver;")
    • 新建一个QLCDNumber对象。
    • 将新建的QLCDNumber对象设置为12位。
    • setMode()该属性保存当前的显示模式(数字库),对应于当前显示模式,即二进制、八进制、十进制(默认)和十六进制中的一种。十进制模式可以显示浮点值,其他模式显示整数等值。
    • setStyleSheet()设置LCD的外观,样式介绍如下:

    time = QTimer(self)
    time.setInterval(1000)

    QTimer类提供重复性和单次定时器。QTimer类为定时器提供高级编程接口。要使用它,请创建一个QTimer,将其timeout()信号连接到相应的插槽,然后调用start()。从此以后,它将以固定的时间间隔发出timeout()信号。

    setInterval()该属性拥有以毫秒为单位的超时时间间隔。此属性的默认值为0。

    def refresh(self):
        startDate = QDateTime.currentMSecsSinceEpoch()
        endDate = QDateTime(QDate(2020, 2, 4), QTime(0, 0, 0)).toMSecsSinceEpoch()
        interval = endDate - startDate
        if interval > 0:
            days = interval // (24 * 60 * 60 * 1000)
            hour = (interval - days * 24 * 60 * 60 * 1000) // (60 * 60 * 1000)
            min = (interval - days * 24 * 60 * 60 * 1000 - hour * 60 * 60 * 1000) // (60 * 1000)
            sec = (interval - days * 24 * 60 * 60 * 1000 - hour * 60 * 60 * 1000 - min * 60 * 1000) // 1000
            intervals = str(days) + ':' + str(hour) + ':' + str(min) + ':' + str(sec)
            self.lcd.display(intervals)

    因为我们设置的超时间隔是1000ms(1秒),所以每隔1秒我们就会调用refresh()这个槽函数。在这个槽函数中我们要不断的进行倒计时的计算。

    QDateTime类提供日期和时间函数。QDateTime对象包含日历日期和时钟时间(“日期时间”)。它是QDate和QTime类的组合。它可以从系统时钟读取当前的日期时间。

    1. 首先我们计算当前时间,这里我们使用了currentMSecsSinceEpoch()将其转换成当前时间到1970-01-01T00:00:00世界协调时间以来的毫秒数。
    2. 其次因为冬季奥运会的时间是2020年2月4日开始,我们假设是0:0:0开始的,我们创建一个QDatetime对象,并使用toMSecsSinceEpoch()返回2020年2月4日0:0:0自1970-01-01T00:00:00.000世界协调时间以来的毫秒数。
    3. 再次我们将上面的结果进行相减,得到了当前时间到冬季奥运会开幕时的时间间隔。
    4. 最后我们进行了一些列的计算,得到天数、小时数、分钟数、秒数并显示在LCD上。

    跟着教程自己也写了一个小例子,效果如下:

    完整代码:

    from PyQt5.QtWidgets import (QApplication,QWidget,QLCDNumber,QGridLayout,QLabel)
    from PyQt5.QtGui import QFont
    from PyQt5.QtCore import Qt,QTimer,QDateTime,QDate,QTime
    import sys
    
    class Example(QWidget):
        def __init__(self):
            super(Example, self).__init__()
            self.initUI()
    
        def initUI(self):
            self.setGeometry(300,300,400,400)
            self.setWindowTitle("LCD显示")
            gridLayout = QGridLayout()
            self.lb = QLabel("距离2019年农历新年还有")
            self.lb.setFont(QFont("微软雅黑",26,QFont.Bold))
            self.lb.setStyleSheet("background-color:rgb(50,205,50)")
            # self.lb.setStyleSheet("color:rgb(255,215,0)")
            self.lb.setAlignment(Qt.AlignCenter)
            self.lcd1 = QLCDNumber()
            self.lcd1.setDigitCount(20)  #设置显现的范围长度为20
            self.lcd1.setMode(QLCDNumber.Dec)
            self.lcd1.setSegmentStyle(QLCDNumber.Flat)
            self.lcd1.setStyleSheet("border :2px solid black;color:red;background:silver;")
            self.lcd2 = QLCDNumber()
            self.lcd2.setDigitCount(20)  # 设置显现的范围长度为20
            self.lcd2.setMode(QLCDNumber.Dec)
            self.lcd2.setSegmentStyle(QLCDNumber.Flat)
            self.lcd2.setStyleSheet("border :3px solid black;font-size:22px;color:blue;background:pink;")
    
            timer = QTimer(self)
            timer.setInterval(1000)
            timer.timeout.connect(self.refresh) #隔1000ms 发射一次信号
            timer.start()
    
            gridLayout.addWidget(self.lcd1, 0, 0, 1, 4)
            gridLayout.addWidget(self.lb,1,0,1,4)
            gridLayout.addWidget(self.lcd2,2,0,1,4)
            self.setLayout(gridLayout)
    
        def refresh(self):
            currentDateTime = QDateTime.currentDateTime().toString("yyyy-MM-dd hh:mm:ss")
            self.lcd1.display(currentDateTime)
    
            startDateTime = QDateTime.currentMSecsSinceEpoch()
            endDateTime = QDateTime(QDate(2019,2,4),QTime(0,0,0)).toMSecsSinceEpoch()
            interval = endDateTime - startDateTime
            if interval>0:
                days = interval // (24*60*60*1000)
                hours = (interval- days*60*60*1000) // (60*60*1000)
                mins = (interval- days*60*60*1000- hours*60*60*1000) // (60*1000)
                secs = (interval- days*60*60*1000- hours*60*60*1000 - mins *60*1000) // 1000
                intervals = str(days) + "D-" + str(hours) + ":" + str(mins) + ":" + str(secs)
                self.lcd2.display(intervals)
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        ex = Example()
        ex.show()
        sys.exit(app.exec_())
  • 相关阅读:
    CSS使用position:sticky 实现粘性布局
    【笔记】原生JS实现验证框架 checkFun
    jQuery与vue分别实现超级简单的绿色拖动验证码功能
    vue从入门到进阶:Vuex状态管理(十)
    vue从入门到进阶:vue-router路由功能(九)
    vue从入门到进阶:渲染函数 & JSX(八)
    vue从入门到进阶:自定义指令directive,插件的封装以及混合mixins(七)
    vue从入门到进阶:组件Component详解(六)
    vue从入门到进阶:过滤器filters(五)
    vue从入门到进阶:Class 与 Style 绑定(四)
  • 原文地址:https://www.cnblogs.com/XJT2018/p/10224109.html
Copyright © 2011-2022 走看看