使用pyqt5编写一个七彩时钟

使用pyqt5编写一个七彩时钟

  • 效果
  • 代码解析
    • 定义 RainbowClockWindow 类
    • 初始化用户界面
    • 显示时间方法
  • 完整代码

在这篇博客中,我们将使用 PyQt5 创建一个简单的七彩数字时钟。

效果

在这里插入图片描述

代码解析

定义 RainbowClockWindow 类

class RainbowClockWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle('Rainbow Digital Clock')
        self.setGeometry(100, 100, 400, 200)

        self.initUI()

初始化用户界面

    def initUI(self):
        layout = QVBoxLayout()

        self.time_layout = QHBoxLayout()
        self.time_layout.setSpacing(0)  # 设置标签之间的间距为0

        self.hour_label = QLabel(self)
        self.hour_label.setAlignment(Qt.AlignCenter)
        self.hour_label.setStyleSheet("font-size: 48px;")

        self.colon1_label = QLabel(self)
        self.colon1_label.setAlignment(Qt.AlignCenter)
        self.colon1_label.setStyleSheet("font-size: 48px;")
        self.colon1_label.setText(":")

        self.minute_label = QLabel(self)
        self.minute_label.setAlignment(Qt.AlignCenter)
        self.minute_label.setStyleSheet("font-size: 48px;")

        self.colon2_label = QLabel(self)
        self.colon2_label.setAlignment(Qt.AlignCenter)
        self.colon2_label.setStyleSheet("font-size: 48px;")
        self.colon2_label.setText(":")

        self.second_label = QLabel(self)
        self.second_label.setAlignment(Qt.AlignCenter)
        self.second_label.setStyleSheet("font-size: 48px;")

        self.time_layout.addWidget(self.hour_label)
        self.time_layout.addWidget(self.colon1_label)
        self.time_layout.addWidget(self.minute_label)
        self.time_layout.addWidget(self.colon2_label)
        self.time_layout.addWidget(self.second_label)

        layout.addLayout(self.time_layout)
        layout.setAlignment(Qt.AlignCenter)  # 居中对齐

        container = QWidget()
        container.setLayout(layout)
        self.setCentralWidget(container)

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

        self.showTime()

  • 创建一个垂直布局 QVBoxLayout 和一个水平布局 QHBoxLayout,并设置水平布局的标签间距为0。
  • 创建五个标签:hour_label、colon1_label、minute_label、colon2_label 和
    second_label,并设置标签的对齐方式和样式,使其在窗口中居中并且字体大小为 48 像素。
  • 将五个标签添加到水平布局中。
  • 将水平布局添加到垂直布局中,并设置垂直布局居中对齐。
  • 创建一个容器 QWidget,将布局设置为该容器的布局,并将容器设置为主窗口的中央控件。
  • 创建一个 QTimer 对象,每秒触发一次 timeout 事件,连接到 showTime 方法。
  • 调用 showTime 方法显示当前时间。

显示时间方法

    def showTime(self):
        current_time = QTime.currentTime()
        hour = current_time.toString('hh')
        minute = current_time.toString('mm')
        second = current_time.toString('ss')

        # Generate random colors for hour, minute, and second
        hour_color = QColor(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
        minute_color = QColor(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
        second_color = QColor(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))

        self.hour_label.setText(hour)
        self.hour_label.setStyleSheet(f"font-size: 48px; color: {hour_color.name()};")

        self.minute_label.setText(minute)
        self.minute_label.setStyleSheet(f"font-size: 48px; color: {minute_color.name()};")

        self.second_label.setText(second)
        self.second_label.setStyleSheet(f"font-size: 48px; color: {second_color.name()};")

        # Colon colors
        self.colon1_label.setStyleSheet(f"font-size: 48px; color: #000000;")
        self.colon2_label.setStyleSheet(f"font-size: 48px; color: #000000;")

  • showTime 方法获取当前时间并将其格式化为小时、分钟和秒。
  • 为小时、分钟和秒生成随机颜色,并将这些颜色应用到相应的标签上。
  • 将两个冒号标签的颜色固定为黑色。

完整代码

import sys
import random
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QHBoxLayout, QVBoxLayout, QWidget
from PyQt5.QtCore import QTimer, QTime, Qt
from PyQt5.QtGui import QColor

class RainbowClockWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle('Rainbow Digital Clock')
        self.setGeometry(100, 100, 400, 200)

        self.initUI()

    def initUI(self):
        layout = QVBoxLayout()

        self.time_layout = QHBoxLayout()
        self.time_layout.setSpacing(0)  # 设置标签之间的间距为0

        self.hour_label = QLabel(self)
        self.hour_label.setAlignment(Qt.AlignCenter)
        self.hour_label.setStyleSheet("font-size: 48px;")

        self.colon1_label = QLabel(self)
        self.colon1_label.setAlignment(Qt.AlignCenter)
        self.colon1_label.setStyleSheet("font-size: 48px;")
        self.colon1_label.setText(":")

        self.minute_label = QLabel(self)
        self.minute_label.setAlignment(Qt.AlignCenter)
        self.minute_label.setStyleSheet("font-size: 48px;")

        self.colon2_label = QLabel(self)
        self.colon2_label.setAlignment(Qt.AlignCenter)
        self.colon2_label.setStyleSheet("font-size: 48px;")
        self.colon2_label.setText(":")

        self.second_label = QLabel(self)
        self.second_label.setAlignment(Qt.AlignCenter)
        self.second_label.setStyleSheet("font-size: 48px;")

        self.time_layout.addWidget(self.hour_label)
        self.time_layout.addWidget(self.colon1_label)
        self.time_layout.addWidget(self.minute_label)
        self.time_layout.addWidget(self.colon2_label)
        self.time_layout.addWidget(self.second_label)

        layout.addLayout(self.time_layout)
        layout.setAlignment(Qt.AlignCenter)  # 居中对齐

        container = QWidget()
        container.setLayout(layout)
        self.setCentralWidget(container)

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

        self.showTime()

    def showTime(self):
        current_time = QTime.currentTime()
        hour = current_time.toString('hh')
        minute = current_time.toString('mm')
        second = current_time.toString('ss')

        # Generate random colors for hour, minute, and second
        hour_color = QColor(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
        minute_color = QColor(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
        second_color = QColor(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))

        self.hour_label.setText(hour)
        self.hour_label.setStyleSheet(f"font-size: 48px; color: {hour_color.name()};")

        self.minute_label.setText(minute)
        self.minute_label.setStyleSheet(f"font-size: 48px; color: {minute_color.name()};")

        self.second_label.setText(second)
        self.second_label.setStyleSheet(f"font-size: 48px; color: {second_color.name()};")

        # Colon colors
        self.colon1_label.setStyleSheet(f"font-size: 48px; color: #000000;")
        self.colon2_label.setStyleSheet(f"font-size: 48px; color: #000000;")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = RainbowClockWindow()
    window.show()
    sys.exit(app.exec_())

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/759357.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【乐器识别系统】图像识别+人工智能+深度学习+Python+TensorFlow+卷积神经网络+模型训练

一、介绍 乐器识别系统。使用Python为主要编程语言,基于人工智能框架库TensorFlow搭建ResNet50卷积神经网络算法,通过对30种乐器(‘迪吉里杜管’, ‘铃鼓’, ‘木琴’, ‘手风琴’, ‘阿尔卑斯号角’, ‘风笛’, ‘班卓琴’, ‘邦戈鼓’, ‘…

Lumos学习王佩丰Excel第三讲:查找替换定位

一、查找和替换 1、按值查找 2、按格式查找 将红色的单元格替换成黄色的单元格,其他格式同理处理。 3、是否开启单元格匹配 若不打开选项卡直接全部替换,会出现“苏州市市”的情况;加入单元格匹配的规则,检索时会以整个单元格内…

【车载开发系列】S32 Design Studio工具安装步骤

【车载开发系列】S32 Design Studio工具安装步骤 S32 Design Studio工具安装步骤 【车载开发系列】S32 Design Studio工具安装步骤※关键字提炼※一. 准备工作二. 下载安装包三. 获取License许可四. 开始预安装五. 开始正式安装六. 启动软件七. 安装插件八. 卸载插件九. 确认安…

系留无人机+自组网+单兵图传:低空集群组网指挥系统技术详解

低空无人机集群的控制、调度、信息回传需要有高度可靠和稳定的无线通信链路来保障。我国发达的公网基础设施为上述应用创造了良好的条件,但低空应用必须要考虑到在极端情况下公网瘫痪造成的通信链路中断带来的影响,因此有必要在公网之外,寻求…

【机器学习】机器学习重要方法——迁移学习:理论、方法与实践

文章目录 迁移学习:理论、方法与实践引言第一章 迁移学习的基本概念1.1 什么是迁移学习1.2 迁移学习的类型1.3 迁移学习的优势 第二章 迁移学习的核心方法2.1 特征重用(Feature Reuse)2.2 微调(Fine-Tuning)2.3 领域适…

线性代数|机器学习-P18快速下降奇异值

文章目录 1. 为什么要低秩矩阵1.1 矩阵A的秩定义1.2 矩阵压缩PCA 2. 低秩矩阵图像处理3. 秩的相关性质3.1 秩的公差轴表示3.2 Eckart-Young 定理 4. 低秩矩阵4.1 低秩矩阵描述4.2 函数低秩矩阵形式4.3通项小结4.4 函数采样拟合 5. 西尔维斯特方程5.1 希尔伯特矩阵举例5.2 范德蒙…

c++(三)

1. STL 1.1. 迭代器 迭代器是访问容器中元素的通用方法。如果使用迭代器,不同的容器,访问元素的方法是相同的;迭代器支持的基本操作:赋值()、解引用(*)、比较(和!&…

ros笔记01--初次体验ros2

ros笔记01--初次体验ros2 介绍安装ros2测试验证ros2说明 介绍 机器人操作系统(ROS)是一组用于构建机器人应用程序的软件库和工具。从驱动程序和最先进的算法到强大的开发者工具,ROS拥有我们下一个机器人项目所需的开源工具。 当前ros已经应用到各类机器人项目开发中…

【IVI】CarService启动-Android13

【IVI】CarService启动-Android13 1、CarServiceImpl启动概述2、简要时序图 1、CarServiceImpl启动概述 【IVI】CarService启动: CarServiceHelperService中绑定CarServiceICarImpl初始化各种服务 packages/services/Car/README.md 2、简要时序图

Linux——passwd文件,grep,cut

/etc/passwd文件含义 作用 - 记录用户账户信息:共分为7段,使用冒号分割 含义 - 文件内容意义:账户名:密码代号x:UID:GID:注释:家目录:SHELL - 第7列/sbin/nologin&#x…

昇思25天学习打卡营第7天之二 | 模型保存与加载

1. 保存与加载 在训练网络模型的过程中,实际上我们希望保存中间和最后的结果,用于微调(fine-tune)和后续的模型推理与部署,本章节我们将介绍如何保存与加载模型。 1.1 导入依赖 # 导入numpy库,并将其重命…

【C语言】--分支和循环(1)

🍿个人主页: 起名字真南 🧇个人专栏:【数据结构初阶】 【C语言】 目录 前言1 if 语句1.1 if1.2 else1.3 嵌套if1.4 悬空else 前言 C语言是结构化的程序设计语言,这里的结构指的是顺序结构、选择结构、循环结构。 我们可以用if、switch实现分支…

51单片机第6步_stdlib.h库函数

本章重点学习stdlib.h库函数。 #include <REG51.h> //包含头文件REG51.h,使能51内部寄存器; #include <stdlib.h> //float atof (char *s1); //参数s1字符串可包含正负号,小数点或E(e)来表示指数部分,如123.456或123e-2; //若首字符是非数据字符,或为正负号…

力扣每日一题 6/30 记忆化搜索/动态规划

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;IT竞赛 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 494.目标和【中等】 题目&#xff1a; 给你一个非负整数数组 nums 和一个…

VMware中的三种虚拟网络模式

虚拟机网络模式 1 主机网络环境2 VMware中的三种虚拟网络模式2.1 桥接模式NAT模式仅主机模式网络模式选择1 VMware虚拟网络配置2 虚拟机选择网络模式3 Windows主机网络配置 配置静态IP 虚拟机联网方式为桥接模式&#xff0c;这种模式下&#xff0c;虚拟机通过主机的物理网卡&am…

mysql8.0-学习

文章目录 mysql8.0基础知识-学习安装mysql_8.0登录mysql8.0的体系结构与管理体系结构图连接mysqlmysql8.0的 “新姿势” mysql的日常管理用户安全权限练习查看用户的权限回收:revoke角色 mysql的多种连接方式socket显示系统中当前运行的所有线程 tcp/ip客户端工具基于SSL的安全…

2024最新boss直聘岗位数据爬虫,并进行可视化分析

前言 近年来,随着互联网的发展和就业市场的变化,数据科学与爬虫技术在招聘信息分析中的应用变得越来越重要。通过对招聘信息的爬取和可视化分析,我们可以更好地了解当前的就业市场动态、职位需求和薪资水平,从而为求职者和招聘企业提供有价值的数据支持。本文将介绍如何使…

Linux系统编程--进程间通信

目录 1. 介绍 1.1 进程间通信的目的 1.2 进程间通信的分类 2. 管道 2.1 什么是管道 2.2 匿名管道 2.2.1 接口 2.2.2 步骤--以父子进程通信为例 2.2.3 站在文件描述符角度-深度理解 2.2.4 管道代码 2.2.5 读写特征 2.2.6 管道特征 2.3 命名管道 2.3.1 接口 2.3.2…

【驱动篇】龙芯LS2K0300之i2c设备驱动

实验背景 由于官方内核i2c的BSP有问题&#xff08;怀疑是设备树这块&#xff09;&#xff0c;本次实验将不通过设备树来驱动aht20&#xff08;i2c&#xff09;模块&#xff0c;大致的操作过程如下&#xff1a; 模块连接&#xff0c;查看aht20设备地址编写device驱动&#xff…

K8S之网络深度剖析(一)(持续更新ing)

K8S之网络深度剖析 一 、关于K8S的网络模型 在K8s的世界上,IP是以Pod为单位进行分配的。一个Pod内部的所有容器共享一个网络堆栈(相当于一个网络命名空间,它们的IP地址、网络设备、配置等都是共享的)。按照这个网络原则抽象出来的为每个Pod都设置一个IP地址的模型也被称作为I…