下面我将详细介绍“PyQt5使用QTimer实现电子时钟”的攻略。
步骤
- 首先,我们需要导入PyQt5中的QTimer模块,以便使用其中的计时器函数。
from PyQt5.QtCore import QTimer
- 然后,我们需要在界面中添加一个label组件,以便用来显示电子时钟的时间。这里设置label的文本居中对齐,并设置字体大小和颜色。
self.label = QtWidgets.QLabel(Form)
self.label.setGeometry(QtCore.QRect(90, 50, 161, 71))
self.label.setAlignment(QtCore.Qt.AlignCenter)
font = QtGui.QFont()
font.setFamily("Arial")
font.setPointSize(40)
font.setBold(True)
font.setWeight(75)
self.label.setFont(font)
self.label.setStyleSheet("color: rgb(255, 255, 255);")
- 接着,我们需要实现一个更新时间的函数,该函数会在计时器结束后自动触发。这里使用了PyQt5的信号槽机制,每隔1秒钟更新一下当前的时间,并将其设置为label的文本。
def update_time(self):
current_time = QTime.currentTime()
display_time = current_time.toString('hh:mm:ss')
self.label.setText(display_time)
- 最后,我们需要创建一个计时器对象,设置计时周期为每隔1秒触发一次更新时间的函数。并且启动计时器。
timer = QTimer(Form)
timer.timeout.connect(self.update_time)
timer.start(1000)
示例说明
下面我们通过两个示例来展示如何使用QTimer实现电子时钟。
示例一:简单的电子时钟
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel
from PyQt5.QtCore import QTimer, QTime, Qt
class Form(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 350, 150)
self.setWindowTitle('Digital Clock')
self.label = QLabel(self)
self.label.setGeometry(60, 40, 200, 50)
self.label.setAlignment(Qt.AlignCenter)
font = self.label.font()
font.setPointSize(30)
self.label.setFont(font)
timer = QTimer(self)
timer.timeout.connect(self.update_time)
timer.start(1000)
self.show()
def update_time(self):
current_time = QTime.currentTime()
display_time = current_time.toString('hh:mm:ss')
self.label.setText(display_time)
if __name__ == '__main__':
app = QApplication(sys.argv)
form = Form()
sys.exit(app.exec_())
在这个示例中,我们创建了一个窗口,并在窗口中添加了一个label组件,用来显示电子时钟的时间。我们实现了一个update_time函数,每隔1秒钟更新一下当前的时间,并将其设置为label的文本。最后创建了一个计时器对象,设置计时周期为每隔1秒触发一次更新时间的函数。并且启动计时器。
示例二:带转盘的电子时钟
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel
from PyQt5.QtCore import QTimer, QTime, Qt, pyqtProperty, pyqtSlot
class Form(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 350, 150)
self.setWindowTitle('Digital Clock')
self.label = QLabel(self)
self.label.setGeometry(60, 40, 200, 50)
self.label.setAlignment(Qt.AlignCenter)
font = self.label.font()
font.setPointSize(30)
self.label.setFont(font)
self._time = QTime()
self._timer = QTimer(self)
self._timer.timeout.connect(self.update_time)
self._timer.start(1000)
def getTime(self):
return self._time
@pyqtSlot(QTime)
def setTime(self, time):
if time != self._time:
self._time = time
self.label.setText(self._time.toString('hh:mm:ss'))
self.update()
time = pyqtProperty(QTime, getTime, setTime)
def update_time(self):
self.time = QTime.currentTime()
if __name__ == '__main__':
app = QApplication(sys.argv)
form = Form()
form.setStyleSheet("QLabel { color : green; }")
form.show()
sys.exit(app.exec_())
在这个示例中,我们同样创建了一个窗口,并在窗口中添加了一个label组件,用来显示电子时钟的时间。我们这里使用了一个pyqtProperty修饰符,将QTime类型的_time属性转换为time属性,并以此实现了一个setter和getter函数。我们实现了一个update_time函数,每隔1秒钟更新一个_time属性,并将其转换为time属性,并将其设置为label的文本。最后创建了一个计时器对象,设置计时周期为每隔1秒触发一次更新时间的函数。并且启动计时器。样式表负责将文本颜色更改为绿色,并为我们的电子时钟添加额外的外观特性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PyQt5使用QTimer实现电子时钟 - Python技术站