gpt4 book ai didi

python - 以毫米为单位的 PyQt 倒数计时器 :ss format

转载 作者:行者123 更新时间:2023-12-05 05:02:43 25 4
gpt4 key购买 nike

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

这是我的界面

enter image description here

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

enter image description here

目标是将它设置为固定时间,例如 10 分钟,并从 10:00 开始,一直持续到 09:59、09:58 等。

这是我目前的代码:

from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5 import QtCore
import sys

DURATION_INT = 60

class App(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
# 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: 25pt 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)

# Show window
self.win.show()
sys.exit(app.exec_())

def startTimer(self):
self.time_left_int = DURATION_INT

self.myTimer = QtCore.QTimer(self)
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):
self.timerLabel.setText(str(self.time_left_int))

app = QtWidgets.QApplication(sys.argv)
main_window = App()
main_window.show()
sys.exit(app.exec_())

最佳答案

要回答您的特定问题,您需要在更新 self.timerLabel 小部件中的文本之前将 self.time_left_int 值转换为格式化字符串。这是执行该转换的函数。

def secs_to_minsec(secs: int):
mins = secs // 60
secs = secs % 60
minsec = f'{mins:02}:{secs:02}'
return minsec

您的程序的另一个问题是您在成员函数 startTimer 中定义了 self.time_left_intself.myTimer 变量。由于这些是 App 类的成员变量,因此必须在 __init__() 中定义它们。

以下是纠正这些问题的程序的完整版本。我所做的其他更改是:

  • 减少了 self.timerLabel 中文本的大小,以防止它超过我机器上的框架大小;您可能需要根据自己的目的将其改回。
  • DURATION_INT 设置为 600 秒而不是 60,这样它将从 10:00 而不是 01:00 开始倒计时。
  • __init__() 末尾附近添加了对 self.update_gui() 的调用,以产生 DURATION_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_())

关于python - 以毫米为单位的 PyQt 倒数计时器 :ss format,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62006303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com