当前位置: 首页 > news >正文

PyQt基础——简单闹钟ui实现(图形化界面、定时器事件)

一、代码展示:

import sys

from PyQt6.QtCore import QTimer, QTime
from PyQt6.QtWidgets import QWidget, QApplication, QLabel, QPushButton, QLineEdit
from PyQt6 import uic
from PyQt6.QtTextToSpeech import QTextToSpeech


# 封装一个我的窗口类
class MyWidget(QWidget):
    def __init__(self):
        super().__init__()
        # 通过uic将ui界面加载到程序中来
        ui = uic.loadUi("./Form.ui",self)
        self.label:QLabel = ui.label
        self.pushButton:QPushButton = ui.pushButton
        self.lineEdit:QLineEdit = ui.lineEdit
        self.label_4:QLabel = ui.label_4

        self.timer = QTimer()
        self.timer.timeout.connect(self.timeout_slot)
        self.timer.start(1000)

        self.alarm_timer = QTimer()
        self.alarm_timer.timeout.connect(self.stop_alarm)
        self.pushButton.clicked.connect(self.pushButton_slot)
        self.alarm_time = None
        self.alarm_active = False
        self.alarm_sounding = False
        self.speecher = QTextToSpeech()
    def pushButton_slot(self):
        if self.pushButton.text() == "启动":
            input_time = self.lineEdit.text()
            try:
                self.alarm_time = QTime.fromString(input_time,"hh:mm:ss")
                if self.alarm_time.isValid():
                    self.pushButton.setText("关闭")
                    self.alarm_active = True
                    self.label_4.setText(f"现在是北京时间{input_time}")
                else:
                    self.label_4.setText("输入的时间格式不正确,请使用 hh:mm:ss")
            except ValueError:
                self.label_4.setText("输入的时间格式不正确,请使用 hh:mm:ss")
        else:
            if self.alarm_sounding:
                self.stop_alarm()
            else:
                self.pushButton.setText("启动")
                self.alarm_active = False
                self.label_4.setText("")

    def timeout_slot(self):
        sys_time = QTime.currentTime()
        t = sys_time.toString("hh:mm:ss")
        self.label.setText(t)
        if self.alarm_active and sys_time>=self.alarm_time and not self.alarm_sounding:
            self.alarm_active = False
            self.alarm_sounding = True
            self.alarm_timer.start(30000)
            self.start_alarm()

    def start_alarm(self):
        def speak_loop():
            if self.alarm_sounding:
                self.speecher.say(self.label_4.text())
                QTimer.singleShot(10000,speak_loop)
        speak_loop()

    def stop_alarm(self):
        self.alarm_timer.stop()
        self.alarm_sounding = False
        self.pushButton.setText("启动")
        self.label_4.setText("")

if __name__ == '__main__':
    app = QApplication(sys.argv)
    myWidget = MyWidget()
    myWidget.show()
    sys.exit(app.exec())

二、结果展示:

http://www.dtcms.com/a/76162.html

相关文章:

  • CH347使用笔记:CH347结合STM32CubeIDE实现单片机下载与调试
  • [Banana Pi BPI-R4] RDK 和联发科推出Wi-Fi 7 宽带 CPE 的新硬件参考平台
  • 大语言模型中的 Function Calling
  • Oracle ASM Failgroup故障组
  • vulhub-Billu-b0x攻略
  • DevOps工具链
  • 【c++】内存序 和 内存一致性模型
  • HAL库实现SPI读写FLASH(W25Q32)
  • 组合Composition(has-a)
  • python日期
  • [Mysql]创建数据库基础
  • Rocky Linux 9.x 基于 kubeadm部署k8s 1.32
  • 【H2O2 | 软件开发】前端深拷贝的实现
  • 基于javaweb的SpringBoot公司日常考勤系统设计与实现(源码+文档+部署讲解)
  • CMake基础之-控制流
  • 【备赛】遇到的小问题-1
  • 施磊老师高级c++(一)
  • 8. Merge Sorted Array
  • 【C++基础】CMake项目
  • 使用 Spring 的 FactoryBean 创建和获取 Bean 对象
  • 将 VOC 格式 XML 转换为 YOLO 格式 TXT
  • 数据结构 -- 二叉树的存储结构
  • 使用python seaborn创建配对图:从核心概念到实战案例
  • 跨系统投屏:Realme手机(远程)投屏到Linux系统的简单方法
  • winx64 安装对应版本火狐浏览器驱动
  • 图生生AI修图,用“画面扩充“重构创作想象
  • 基于FPGA的3U机箱温度采集板PT100,应用于轨道交通/电力储能等
  • 如何在 Github 上获得 1000 star?
  • AI预测体彩排3新模型百十个定位预测+胆码预测+杀和尾+杀和值2025年3月18日第22弹
  • 如何把视频转成动态图?