由4个按钮控制的秒表

-2 投票
0 回答
32 浏览
提问于 2025-04-12 06:22

我创建了一个窗口,里面只有四个按钮(开始按钮、暂停按钮、继续按钮和重置按钮),用来控制一个8位的LCD计时器(格式是00小时:00分钟:00秒)。我在同一个.py文件夹里写了两个类,第一个是用来做界面的 class Ui_Form,第二个是用来控制计时器的 class Stopwatch。当我运行这个程序时,没有报错,但是激活或暂停计时器的功能却不工作,肯定是我在代码的某个地方犯了错误,但我没有注意到这个错误。我想这可能是通过这四个按钮的操作逻辑出了问题。我把包含这两个类的完整代码分享给你们:

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QLCDNumber, QWidget, QPushButton
from PyQt5.QtCore import QTimer, QTime
import sys, reso

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(1130, 720)
        self.widget = QtWidgets.QWidget(Form)
        self.widget.setGeometry(QtCore.QRect(0, 0, 1130, 720))
        self.widget.setObjectName("widget")
        self.label = QtWidgets.QLabel(self.widget)
        self.label.setGeometry(QtCore.QRect(0, 0, 1130, 720))
        self.label.setStyleSheet("background-image: url(:/images/background1.png);")
        self.label.setText("")
        self.label.setObjectName("label")
        self.startButton = QtWidgets.QPushButton(self.widget)
        self.startButton.setGeometry(QtCore.QRect(160, 160, 170, 70))
        font = QtGui.QFont()
        font.setPointSize(14)
        font.setBold(True)
        font.setWeight(75)
        self.startButton.setFont(font)
        self.startButton.setStyleSheet("QPushButton#startButton{\n"
"  background-color: rgba(225, 225, 225, 1);\n"
"  border-radius: 30px; \n"
"  color: rgba(35, 31, 32, 1);\n"
"}\n"
"\n"
"QPushButton#startButton:hover{\n"
"  background-color: rgba(30, 136, 229, 1);\n"
"  color: rgba(255, 255, 255, 210);\n"
"}\n"
"\n"
"QPushButton#startButton:pressed{\n"
"  background-color: rgba(30, 136, 229, 1);\n"
"  color: rgba(255, 255, 255, 210);\n"
"}\n"
"\n"
"\n"
"")
        self.startButton.setObjectName("startButton")
        self.pauseButton = QtWidgets.QPushButton(self.widget)
        self.pauseButton.setGeometry(QtCore.QRect(480, 160, 170, 70))
        font = QtGui.QFont()
        font.setPointSize(14)
        font.setBold(True)
        font.setWeight(75)
        self.pauseButton.setFont(font)
        self.pauseButton.setStyleSheet("QPushButton#pauseButton{\n"
"  background-color: rgba(225, 225, 225, 1);\n"
"  border-radius: 30px;\n"
"  color: rgba(35, 31, 32, 1);\n"
"}\n"
"\n"
"\n"
"QPushButton#pauseButton:hover{\n"
"  background-color: rgba(251, 8, 8, 1);\n"
"  color: rgba(255, 255, 255, 210);\n"
"}\n"
"\n"
"QPushButton#pauseButton:pressed{\n"
"  background-color: #FB0808;\n"
"  color: rgba(255, 255, 255, 210);\n"
"}\n"
"\n"
"")
        self.pauseButton.setObjectName("pauseButton")
        self.resumeButton = QtWidgets.QPushButton(self.widget)
        self.resumeButton.setGeometry(QtCore.QRect(800, 160, 170, 70))
        font = QtGui.QFont()
        font.setPointSize(14)
        font.setBold(True)
        font.setWeight(75)
        self.resumeButton.setFont(font)
        self.resumeButton.setStyleSheet("QPushButton#resumeButton{\n"
"  background-color: rgba(225, 225, 225, 1);\n"
"  border-radius: 30px; \n"
"  color: rgba(35, 31, 32, 1);\n"
"}\n"
"\n"
"\n"
"QPushButton#resumeButton:hover{\n"
"  background-color: rgba(30, 136, 229, 1);\n"
"  color: rgba(255, 255, 255, 210);\n"
"}\n"
"\n"
"QPushButton#resumeButton:pressed{\n"
"  background-color: rgba(30, 136, 229, 1);\n"
"  color: rgba(255, 255, 255, 210);\n"
"}\n"
"\n"
"")
        self.resumeButton.setObjectName("resumeButton")
        self.lcdNumber = QtWidgets.QLCDNumber(self.widget)
        self.lcdNumber.setGeometry(QtCore.QRect(500, 300, 130, 41))
        self.lcdNumber.setStyleSheet("QLCDNumber#lcdNumber{\n"
"  background-color: darkgreen;\n"
"}")
        self.lcdNumber.setObjectName("lcdNumber")
        self.spinBox = QtWidgets.QSpinBox(self.widget)
        self.spinBox.setGeometry(QtCore.QRect(160, 300, 170, 41))
        self.spinBox.setStyleSheet("QSpinBox#spinBox{\n"
" border: 2px solid black;\n"
"}")
        self.spinBox.setObjectName("spinBox")
        self.lcd = QtWidgets.QLCDNumber(self.widget)
        self.lcd.setGeometry(QtCore.QRect(810, 300, 190, 41))
        self.lcd.setStyleSheet("QLCDNumber#lcd{\n"
"  background-color: darkgreen;\n"
"  color: rgba(255, 0, 0, 1);\n"
"}")
        self.lcd.setDigitCount(8)  # Permet d'afficher jusqu'à 8 chiffres.
        self.lcd.display("00:00:00")
        self.lcd.setSegmentStyle(QLCDNumber.Flat)
        self.lcd.setObjectName("lcd")
        self.resetButton = QtWidgets.QPushButton(self.widget)
        self.resetButton.setGeometry(QtCore.QRect(770, 300, 41, 41))
        self.resetButton.setStyleSheet("image: url(:/images/logo2.png);")
        self.resetButton.setText("")
        self.resetButton.setObjectName("resetButton")
        self.spinBox_2 = QtWidgets.QSpinBox(self.widget)
        self.spinBox_2.setGeometry(QtCore.QRect(465, 80, 201, 40))
        self.spinBox_2.setStyleSheet("QSpinBox#spinBox_2{\n"
" border: 2px solid black;\n"
"}")
        self.spinBox_2.setObjectName("spinBox_2")
        self.label_2 = QtWidgets.QLabel(self.widget)
        self.label_2.setGeometry(QtCore.QRect(161, 270, 168, 31))
        font = QtGui.QFont()
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.label_2.setFont(font)
        self.label_2.setLayoutDirection(QtCore.Qt.LeftToRight)
        self.label_2.setStyleSheet("QLabel#label_2{\n"
"background-color: rgba(225, 225, 225, 1);\n"
"}")
        self.label_2.setAlignment(QtCore.Qt.AlignCenter)
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(self.widget)
        self.label_3.setGeometry(QtCore.QRect(500, 270, 130, 31))
        font = QtGui.QFont()
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.label_3.setFont(font)
        self.label_3.setLayoutDirection(QtCore.Qt.LeftToRight)
        self.label_3.setStyleSheet("QLabel#label_3{\n"
"background-color: rgba(225, 225, 225, 1);\n"
"}")
        self.label_3.setAlignment(QtCore.Qt.AlignCenter)
        self.label_3.setObjectName("label_3")
        self.label_4 = QtWidgets.QLabel(self.widget)
        self.label_4.setGeometry(QtCore.QRect(770, 270, 230, 31))
        font = QtGui.QFont()
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.label_4.setFont(font)
        self.label_4.setLayoutDirection(QtCore.Qt.LeftToRight)
        self.label_4.setStyleSheet("QLabel#label_4{\n"
"background-color: rgba(225, 225, 225, 1);\n"
"border: 2px solid red;\n"
"}")
        self.label_4.setAlignment(QtCore.Qt.AlignCenter)
        self.label_4.setObjectName("label_4")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.startButton.setText(_translate("Form", "Normal Rot "))
        self.pauseButton.setText(_translate("Form", "Stop"))
        self.resumeButton.setText(_translate("Form", "Reverse Rot"))
        self.label_2.setText(_translate("Form", "Operation mode "))
        self.label_3.setText(_translate("Form", "Postion"))
        self.label_4.setText(_translate("Form", "Timer"))

class Stopwatch(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.timer = QTimer(self)
        self.time = QTime(0, 0, 0)

        self.startButton.clicked.connect(self.startTimer)
        self.resumeButton.clicked.connect(self.startTimer)
        self.pauseButton.clicked.connect(self.pauseTimer)
        self.resetButton.clicked.connect(self.resetTimer)


        self.timer.timeout.connect(self.updateLCD)

        self.lcd = QLCDNumber(self)
        self.lcd.display(self.time.toString('hh:mm:ss'))
        #self.lcd.setDigitCount(8)
        self.lcd.display("00:00:00")

        #self.startButton = QPushButton('Start', self)
        self.startButton.setCheckable(True)
        self.startButton.clicked[bool].connect(self.startStopwatch)
        #self.startButton.setStyleSheet("QPushButton:checked { background-color: rgba(30, 136, 229, 1); color: white; }")

        #self.pauseButton = QPushButton('Pause', self)
        self.pauseButton.setCheckable(True)
        self.pauseButton.clicked[bool].connect(self.pauseStopwatch)
        #self.pauseButton.setStyleSheet("QPushButton:checked { background-color: rgba(251, 8, 8, 1); color: white; }")

        #self.resumeButton = QPushButton('Resume', self)
        self.resumeButton.setCheckable(True)
        self.resumeButton.clicked[bool].connect(self.resumeStopwatch)
        #self.resumeButton.setStyleSheet("QPushButton:checked { background-color: rgba(30, 136, 229, 1); color: white; }")

        #self.resetButton = QPushButton('Reset', self)
        self.resetButton.clicked.connect(self.resetStopwatch)
        #self.resetButton.setStyleSheet("QPushButton { background-color: green; color: white; }")


    def startStopwatch(self, checked):
        self.resetButtons()
        if checked:
            self.timer.start(1000)
            self.startButton.setChecked(True)

    def pauseStopwatch(self, checked):
        self.resetButtons()
        if checked:
            self.timer.stop()
            self.pauseButton.setChecked(True)

    def resumeStopwatch(self, checked):
        self.resetButtons()
        if checked:
            self.timer.start(1000)
            self.resumeButton.setChecked(True)

    def resetStopwatch(self):
        self.resetButtons()
        self.timer.stop()
        self.time.setHMS(0, 0, 0)
        self.lcd.display(self.time.toString('hh:mm:ss'))

    def resetButtons(self):
        self.startButton.setChecked(False)
        self.pauseButton.setChecked(False)
        self.resumeButton.setChecked(False)

    def updateLCD(self):
        self.time = self.time.addSecs(1)
        self.lcd.display(self.time.toString('hh:mm:ss'))




if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    #stopwatch = Stopwatch()
    Form = QtWidgets.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())

谢谢大家的帮助

0 个回答

暂无回答

撰写回答