Python界面编程第九课:Pyside2 (Qt For Python)创建数字时钟

  • Post author:
  • Post category:python


先上代码:

from PySide2.QtWidgets import QApplication, QWidget, QLCDNumber
from PySide2.QtCore import QTime, QTimer, SIGNAL
import sys
from PySide2.QtGui import QIcon


class DigitalClock(QLCDNumber):
    def __init__(self, parent = None):
        super(DigitalClock, self).__init__(parent)

        self.setSegmentStyle(QLCDNumber.Filled)

        timer = QTimer(self)
        self.connect(timer, SIGNAL('timeout()'), self.showTime)
        timer.start(1000)
        self.showTime()
        self.setWindowTitle("Digital Clock")
        self.resize(300, 200)

        self.setIcon()


    def setIcon(self):
        appIcon = QIcon("icon.png")
        self.setWindowIcon(appIcon)



    def showTime(self):
        time = QTime.currentTime()
        text = time.toString('hh:mm')
        if(time.second() % 2) == 0:
            text = text[:2] + ' ' + text[3:]

        self.display(text)



myapp = QApplication(sys.argv)
window = DigitalClock()
window.show()
myapp.exec_()
sys.exit()

首先导入要用的库:

from PySide2.QtWidgets import QApplication, QWidget, QLCDNumber
from PySide2.QtCore import QTime, QTimer, SIGNAL
import sys
from PySide2.QtGui import QIcon

然后是继承QLCDNumber这个主窗口类。在这个类中,我们将创建

QTimer

类的对象,然后




QTimer



timeout

信号连接到

showTime

这个槽。


QLCDNumber 是什么?

它可以显示任意大小的数字,可以显示十进制、十六进制、八进制或二进制数。使用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对象无法直接获取内容,但可以使用value()得到数值。如果您确实需要文本,我们建议您将给display() 槽提供信号的源连接到另一个槽,并将值存储在那里。

顺便说一句,QLCDNumber是Qt中最古老的部分,它的根源可以追溯到BASIC程序。


QTimer 类是什么 ?

QTimer类为定时器提供了一个高级编程接口。要使用它,先创建一个QTimer,将timeout()信号连接到适当的槽,并调用start()。然后它将以固定的间隔发出timeout()信号。

下面这个槽就连接了timeout()信号:

 def showTime(self):
        time = QTime.currentTime()
        text = time.toString('hh:mm')
        if(time.second() % 2) == 0:
            text = text[:2] + ' ' + text[3:]
 
        self.display(text)

运行一下看效果:

如果不清楚其它代码含义,请参考前面课程:


Python界面编程第一课:我们开始用Pyside2 (Qt For Python)


Python界面编程第二课:Pyside2 创建窗口 (Python GUI)


Python界面编程第三课:Pyside2 (Qt For Python)给窗口加个图标


Python界面编程第四课:Pyside2 (Qt For Python)创建图标模式


Python界面编程第五课:Pyside2 (Qt For Python)怎么创建控件提示Tooltip


Python界面编程第六课:Pyside2 (Qt For Python),QPushButton按钮的信号与槽


Python界面编程第七课:Pyside2 (Qt For Python)窗口居中


Python界面编程第八课:Pyside2 (Qt For Python)打开关于窗口



版权声明:本文为QQ6550523原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。