Python mm:ss格式的PyQt倒计时计时器

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

所以我尝试创建一个简单的GUI UI,它将在开始时倒计时。我有一个工作代码,但我不知道如何以MM:SS格式开始计时

这是我的GUI

当我点击“开始”时,标签变为60(显然)

目标是将它设置为一个固定的时间,比如10分钟,然后在10:00开始,然后下降到09:59、09:58等等

这是我目前掌握的代码:

从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_())