由4个按钮控制的秒表
我创建了一个窗口,里面只有四个按钮(开始按钮、暂停按钮、继续按钮和重置按钮),用来控制一个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 个回答
暂无回答