不要使用Tkinter,使用pyqt5爱实现
时间: 2024-04-21 22:23:28 浏览: 81
好的,以下是使用PyQt5实现的悬浮窗口倒计时工具的示例代码:
```python
import sys
from PyQt5.QtCore import QTimer
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QLineEdit, QPushButton
import time
import pyttsx3
class CountdownTimer(QWidget):
def __init__(self):
super().__init__()
self.countdown_sec = 0
self.remaining_sec = 0
self.timer_running = False
self.label_time = QLabel("00:00:00", self)
self.label_time.setStyleSheet("font-size: 24px;")
self.entry_time = QLineEdit(self)
self.entry_time.setPlaceholderText("请输入倒计时时间(秒)")
self.button_start = QPushButton("开始", self)
self.button_pause = QPushButton("暂停", self)
self.button_pause.setEnabled(False)
self.button_reset = QPushButton("重置", self)
self.button_reset.setEnabled(False)
self.button_stop = QPushButton("停止", self)
self.button_stop.setEnabled(False)
layout = QVBoxLayout()
layout.addWidget(self.label_time)
layout.addWidget(self.entry_time)
layout.addWidget(self.button_start)
layout.addWidget(self.button_pause)
layout.addWidget(self.button_reset)
layout.addWidget(self.button_stop)
self.setLayout(layout)
self.engine = pyttsx3.init()
self.button_start.clicked.connect(self.start_timer)
self.button_pause.clicked.connect(self.pause_timer)
self.button_reset.clicked.connect(self.reset_timer)
self.button_stop.clicked.connect(self.stop_timer)
def start_timer(self):
if self.timer_running:
return
try:
self.countdown_sec = int(self.entry_time.text())
if self.countdown_sec <= 0:
raise ValueError
except ValueError:
self.show_error_message("请输入一个正整数的倒计时时间")
return
self.remaining_sec = self.countdown_sec
self.update_time_label()
self.button_start.setEnabled(False)
self.button_pause.setEnabled(True)
self.button_reset.setEnabled(True)
self.button_stop.setEnabled(True)
self.timer_running = True
self.timer_tick()
def pause_timer(self):
if not self.timer_running:
return
self.timer_running = False
self.button_pause.setText("继续")
def reset_timer(self):
self.timer_running = False
self.remaining_sec = self.countdown_sec
self.update_time_label()
self.button_start.setEnabled(True)
self.button_pause.setEnabled(False)
self.button_reset.setEnabled(False)
self.button_stop.setEnabled(False)
def stop_timer(self):
self.timer_running = False
self.remaining_sec = 0
self.update_time_label()
self.button_start.setEnabled(True)
self.button_pause.setEnabled(False)
self.button_reset.setEnabled(False)
self.button_stop.setEnabled(False)
def timer_tick(self):
if self.remaining_sec <= 0:
self.timer_running = False
self.update_time_label()
self.play_audio()
return
self.update_time_label()
self.remaining_sec -= 1
if self.timer_running:
QTimer.singleShot(1000, self.timer_tick)
def update_time_label(self):
hours = self.remaining_sec // 3600
minutes = (self.remaining_sec % 3600) // 60
seconds = self.remaining_sec % 60
time_str = "{:02d}:{:02d}:{:02d}".format(hours, minutes, seconds)
self.label_time.setText(time_str)
def play_audio(self):
self.engine.say("倒计时结束")
self.engine.runAndWait()
def show_error_message(self, message):
QMessageBox.critical(self, "错误", message)
if __name__ == "__main__":
app = QApplication(sys.argv)
timer = CountdownTimer()
timer.show()
sys.exit(app.exec_())
```
运行以上代码,将会弹出一个使用PyQt5实现的悬浮窗口倒计时工具。你可以在输入框中输入倒计时时间(秒),然后点击开始按钮即可开始倒计时。在倒计时结束时,会有语音提醒。
请注意,你需要先安装PyQt5库和pyttsx3库,可以使用以下命令安装:
```shell
pip install PyQt5 pyttsx3
```
希望以上代码能够满足你的需求!如有其他问题,请随时提问。
阅读全文
相关推荐


















