Python mm:ss格式的PyQt倒计时计时器
所以我尝试创建一个简单的GUI UI,它将在开始时倒计时。我有一个工作代码,但我不知道如何以MM:SS格式开始计时 这是我的GUI 当我点击“开始”时,标签变为60(显然) 目标是将它设置为一个固定的时间,比如10分钟,然后在10:00开始,然后下降到09:59、09:58等等 这是我目前掌握的代码:Python mm:ss格式的PyQt倒计时计时器,python,pyqt,Python,Pyqt,所以我尝试创建一个简单的GUI UI,它将在开始时倒计时。我有一个工作代码,但我不知道如何以MM:SS格式开始计时 这是我的GUI 当我点击“开始”时,标签变为60(显然) 目标是将它设置为一个固定的时间,比如10分钟,然后在10:00开始,然后下降到09:59、09:58等等 这是我目前掌握的代码: 从PyQt5导入QtWidgets 从PyQt5.QtWidgets导入QApplication,QMainWindow 从PyQt5导入QtCore 导入系统 持续时间=60 类应用程序(Q
从PyQt5导入QtWidgets
从PyQt5.QtWidgets导入QApplication,QMainWindow
从PyQt5导入QtCore
导入系统
持续时间=60
类应用程序(QtWidgets.QMainWindow):
定义初始化(自):
super()。\uuuu init\uuuuu()
#应用程序窗口
self.app=QApplication(sys.argv)
self.win=QMainWindow()
self.win.setGeometry(200200200200200)
self.win.setWindowTitle(“测试”)
#小部件
self.titleLabel=qtwidts.QLabel(self.win)
self.titleLabel.setText(“欢迎使用我的应用程序”)
自身标题标签移动(50,20)
self.timerLabel=qtwidts.QLabel(self.win)
self.timerLabel.setText(“01:00”)
自计时标记移动(50,50)
self.timerLabel.setAlignment(QtCore.Qt.AlignCenter)
self.timerLabel.setStyleSheet(“字体:25pt Helvetica”)
self.startButton=qtwidts.QPushButton(self.win)
self.startButton.setText(“开始”)
自我启动按钮移动(50100)
self.startButton.clicked.connect(self.startTimer)
self.stopButton=qtwidts.QPushButton(self.win)
self.stopButton.setText(“停止”)
自动停止按钮移动(50130)
#橱窗
self.win.show()
sys.exit(app.exec_())
def startTimer(自):
self.time\u left\u int=持续时间
self.myTimer=QtCore.QTimer(self)
self.myTimer.timeout.connect(self.timerTimeout)
self.myTimer.start(1000)
def timerTimeout(自身):
self.time\u left\u int-=1
如果self.time\u left\u int==0:
self.time\u left\u int=持续时间
self.update_gui()
def更新_gui(自身):
self.timerLabel.setText(str(self.time\u left\u int))
app=qtwidts.QApplication(sys.argv)
主窗口=应用程序()
主窗口。显示()
sys.exit(app.exec_())
要回答您的具体问题,您需要在更新self.timerLabel
小部件中的文本之前,将self.time\u left\u int
值转换为格式化字符串。下面是一个执行该转换的函数
def secs_to_minsec(secs: int):
mins = secs // 60
secs = secs % 60
minsec = f'{mins:02}:{secs:02}'
return minsec
程序的另一个问题是在成员函数startTimer
中定义self.time\u left\u int
和self.myTimer
变量。由于这些是App
类的成员变量,因此必须在中定义它们
下面是纠正这些问题的完整程序版本。我所作的其他更改包括:
- 减小
self.timerLabel
中文本的大小,以防止其超过我的机器上的框架大小;您可能需要将其更改回您自己的目的
- 将
DURATION\u INT
设置为600秒而不是60秒,这样它将从10:00而不是01:00开始倒计时
- 在
\uu init\uuu()
末尾附近添加了对self.update\u gui()
的调用,以便在程序启动时显示DURATION\u INT
的初始值
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5 import QtCore
import sys
DURATION_INT = 600
def secs_to_minsec(secs: int):
mins = secs // 60
secs = secs % 60
minsec = f'{mins:02}:{secs:02}'
return minsec
class App(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.time_left_int = DURATION_INT
self.myTimer = QtCore.QTimer(self)
# App window
self.app = QApplication(sys.argv)
self.win = QMainWindow()
self.win.setGeometry(200, 200, 200, 200)
self.win.setWindowTitle("test")
# Widgets
self.titleLabel = QtWidgets.QLabel(self.win)
self.titleLabel.setText("Welcome to my app")
self.titleLabel.move(50,20)
self.timerLabel = QtWidgets.QLabel(self.win)
self.timerLabel.setText("01:00")
self.timerLabel.move(50,50)
self.timerLabel.setAlignment(QtCore.Qt.AlignCenter)
self.timerLabel.setStyleSheet("font: 10pt Helvetica")
self.startButton = QtWidgets.QPushButton(self.win)
self.startButton.setText("Start")
self.startButton.move(50,100)
self.startButton.clicked.connect(self.startTimer)
self.stopButton = QtWidgets.QPushButton(self.win)
self.stopButton.setText("Stop")
self.stopButton.move(50,130)
self.update_gui()
# Show window
self.win.show()
sys.exit(app.exec_())
def startTimer(self):
self.time_left_int = DURATION_INT
self.myTimer.timeout.connect(self.timerTimeout)
self.myTimer.start(1000)
def timerTimeout(self):
self.time_left_int -= 1
if self.time_left_int == 0:
self.time_left_int = DURATION_INT
self.update_gui()
def update_gui(self):
minsec = secs_to_minsec(self.time_left_int)
self.timerLabel.setText(minsec)
app = QtWidgets.QApplication(sys.argv)
main_window = App()
main_window.show()
sys.exit(app.exec_())