当前位置: 首页 > 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())

二、结果展示:

相关文章:

  • 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 对象
  • 常见的网页布局结构有哪些/重庆seo薪酬水平
  • wordpress前台浏览量插件/重庆seo网站推广费用
  • 深圳的建站公司/谷歌google play下载
  • 德州哪里有做网站的/自己如何开网站
  • 网站访问速度 云组机/百度推广搜索排名
  • 水土保持生态建设网站/seo点击排名器