import sys
import pygame
from PyQt5.QtCore import QTimer
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, QPushButton, QVBoxLayout, QDoubleSpinBox, QSpinBox
class XiaoYa(QWidget):
def __init__(self):
super().__init__()
pygame.mixer.init()
pygame.mixer.music.load("static/audio_file.mp3")
self.btn = None
self.isStart = None
self.mytimer = None
self.minute = None
self.seconds = None
self.defStyleSheet = "font-size:30px;color:red"
self.intUi()
def intUi(self):
self.setWindowTitle("小雅的倒计时") # 4. 设置窗口标题
self.resize(400, 180) # 设置窗口大小
self.setWindowIcon(QIcon("static/icon.png"))
# 文本框
self.minute = QSpinBox(self)
self.minute.setGeometry(115, 20, 50, 40)
# 设置范围和步长
self.minute.setRange(0, 30)
self.minute.setSingleStep(1)
# 设置当前值
self.minute.setValue(3)
self.minute.setStyleSheet(self.defStyleSheet)
label = QLabel("分", self)
# 设置位置x,y,w,h
label.setGeometry(170, 20, 40, 40)
label.setStyleSheet(self.defStyleSheet)
# 文本框
self.seconds = QSpinBox(self)
self.seconds.setGeometry(210, 20, 50, 40)
# 设置范围和步长
self.seconds.setRange(0, 59)
self.seconds.setSingleStep(1)
# 设置当前值
self.seconds.setValue(0)
self.seconds.setStyleSheet(self.defStyleSheet)
label = QLabel("秒", self)
# 设置位置x,y,w,h
label.setGeometry(270, 20, 40, 40)
label.setStyleSheet(self.defStyleSheet)
# 在窗口里面添加控件
self.btn = QPushButton("开始", self)
self.btn.setGeometry(140, 80, 100, 60)
self.btn.setStyleSheet(self.defStyleSheet)
self.btn.released.connect(self.btnClick)
self.mytimer = QTimer(self)
self.mytimer.timeout.connect(self.onTimer)
self.mytimer.stop()
self.isStart = False
# 开始 OR 停止
def btnClick(self):
if self.isStart:
self.mytimer.stop()
self.btn.setText("开始")
self.isStart = False
else:
pygame.mixer.music.stop()
self.mytimer.start(1000)
self.btn.setText("停止")
self.isStart = True
self.minute.setEnabled(not self.isStart)
self.seconds.setEnabled(not self.isStart)
# 倒计时回调
def onTimer(self):
secondsValue = self.seconds.value()
minuteValue = self.minute.value()
if self.seconds.value() == 1 and minuteValue == 0:
self.seconds.setValue(secondsValue - 1)
print("时间到了")
self.btnClick()
self.pygame_load()
return
if self.seconds.value() == 0:
if minuteValue == 0:
print("时间到了")
self.btnClick()
self.pygame_load()
else:
self.minute.setValue(minuteValue - 1)
self.seconds.setValue(59)
else:
self.seconds.setValue(secondsValue - 1)
def pygame_load(self):
pygame.mixer.music.play()
if __name__ == '__main__':
# 2.创建一个 QApplication 对象,指向QApplication ,接受命令行参数
app = QApplication(sys.argv)
# 3. 创建一个 QWidget对象
w = XiaoYa()
# 5. 展示窗口
w.show()
# 程序进行循环等待状态
app.exec()
![](https://img-blog.csdnimg.cn/direct/e4fc5e4d9c654ecda0eaa7147f2b2f3b.png)
pyinstaller -F -p . main.py
- 里面有两个静态资源需要自行替换一下
- 静态资源目前我试了没有成功打包到exe文件里面,所以打包成exe后静态资源外面还是需要