使用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) # 设置标签之间的间距为0self.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 secondhour_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 colorsself.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 QColorclass 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) # 设置标签之间的间距为0self.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 secondhour_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 colorsself.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_())相关文章:
使用pyqt5编写一个七彩时钟
使用pyqt5编写一个七彩时钟 效果代码解析定义 RainbowClockWindow 类初始化用户界面显示时间方法 完整代码 在这篇博客中,我们将使用 PyQt5 创建一个简单的七彩数字时钟。 效果 代码解析 定义 RainbowClockWindow 类 class RainbowClockWindow(QMainWindow):def _…...
【Linux】:命令行参数
朋友们、伙计们,我们又见面了,本期来给大家解读一下有关Linux命令行参数的相关知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏:C语言:从入…...
高考假期预习指南,送给迷茫的你
高考结束,离别了熟悉的地方,踏上远方。 你,,迷茫吗? 大学是什么?到了大学我该怎样学习?真像网上说的毕业即失业吗? 大学是一个让你学会一技之长的地方,到了大学找到自…...
独孤思维:负债了,还可以翻身吗
01 其实独孤早年也负债。 负债并不可怕。 可怕的是因为负债而催生的想要快速赚钱的心态。 越是有这种心态,越是不可能赚到钱。 相反,可能会让你陷入恶性循环中。 盲目付费,盲目寄希望于某个项目或者某个人。 当成唯一的救命稻草。 这…...
SwiftUI八与UIKIT交互
代码下载 SwiftUI可以在苹果全平台上无缝兼容现有的UI框架。例如,可以在SwiftUI视图中嵌入UIKit视图或UIKit视图控制器,反过来在UIKit视图或UIKit视图控制器中也可以嵌入SwiftUI视图。 本文展示如何把landmark应用的主页混合使用UIPageViewController和…...
RedHat9 | 内部YUM本地源服务器搭建
服务器参数 标识公司内部YUM服务器主机名yum-server网络信息192.168.37.1/24网络属性静态地址主要操作用户root 一、基础环境信息配置 修改主机名 [rootyum-server ~]# hostnamectl hostname yum-server添加网络信息 [rootyum-server ~]# nmcli connection modify ens160 …...
无偏归一化自适应心电ECG信号降噪方法(MATLAB)
心电信号作为一种生物信号,含有大量的临床应用价值的信息,在现代生命医学研究中占有重要的地位。但心电信号低频、低幅值的特点,使其在采集和传输的过程中经常受到噪声的干扰,使心电波形严重失真,从而影响后续的病情分…...
AI基本概念(人工智能、机器学习、深度学习)
人工智能 、 机器学习、 深度学习的概念和关系 人工智能 (Artificial Intelligence)AI- 机器展现出人类智慧机器学习 (Machine Learning) ML, 达到人工智能的方法深度学习 (Deep Learning)DL,执行机器学习的技术 从范围…...
LabVIEW幅频特性测试系统
使用LabVIEW软件开发的幅频特性测试系统。该系统整合了Agilent 83732B信号源与Agilent 8563EC频谱仪,通过LabVIEW编程实现自动控制和数据处理,提供了成本效益高、操作简便的解决方案,有效替代了昂贵的专用仪器,提高了测试效率和设…...
校园卡手机卡怎么注销?
校园手机卡的注销流程可以根据不同的运营商和具体情况有所不同,但一般来说,以下是注销校园手机卡的几种常见方式,我将以分点的方式详细解释: 一、线上注销(通过手机APP或官方网站) 下载并打开对应运营商的…...
logback自定义规则脱敏
自定义规则conversionRule public class LogabckMessageConverter extends MessageConverter {Overridepublic String convert(ILoggingEvent event) {String msg event.getMessage();if ("INFO".equals(event.getLevel().toString())) {msg .....脱敏实现}return …...
高效批量复制与覆盖:一键实现文件管理,轻松应对同名文件,简化工作流程
在数字时代,我们每天都在与海量的文件和数据打交道。你是否曾经遇到过这样的情况:需要批量复制文件到指定文件夹,但一遇到同名文件就头疼不已,要么手动一个个确认覆盖,要么冒着数据丢失的风险直接操作?别担…...
vue3中使用Antv G6渲染树形结构并支持节点增删改
写在前面 在一些管理系统中,会对组织架构、级联数据等做一些管理,你会怎么实现呢?在经过调研很多插件之后决定使用 Antv G6 实现,文档也比较清晰,看看怎么实现吧,先来看看效果图。点击在线体验 实现的功能…...
【PB案例学习笔记】-26制作一个带浮动图标的工具栏
写在前面 这是PB案例学习笔记系列文章的第26篇,该系列文章适合具有一定PB基础的读者。 通过一个个由浅入深的编程实战案例学习,提高编程技巧,以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码,小凡都上传到了gite…...
反向沙箱技术:安全隔离上网
在信息化建设不断深化的今天,业务系统的安全性和稳定性成为各公司和相关部门关注的焦点。面对日益复杂的网络威胁,传统的安全防护手段已难以满足需求。深信达反向沙箱技术,以其独特的设计和强大的功能,成为保障政务系统信息安全的…...
前端在for循环中使用Element-plus el-select中的@click.native动态传参
<el-table ref"table" :data"editTableVariables" cell-dblclick"handleRowDblClick" style"width: 100%" > <!-- el-table-column: 表格列组件,定义每列的展示内容和属性 --><el-table-column prop&q…...
Oracle SQL - CONNECT BY语句Where条件中不能使用OR?[已解决]
数据 SQL> SELECT * FROM demo_a;CUSTOMER TOTAL ---------- ---------- A 100200SQL> SELECT * FROM demo_b;CUSTOMER RN QTY ---------- ---------- ---------- A 1 30 A 2 …...
python-逻辑语句
if else语句 不同于C:else if range语句: continue continue的作用是: 中断所在循环的当次执行,直接进入下一次 continue在嵌套循环中的应用 break 直接结束所在的循环 break在嵌套循环中的应用 continue和break,在…...
【stm32】大一上学期笔记复制
砌墙单片机 外设是什么? ipage 8 nx轴 128 X0-127 y0-63 PWM脉冲宽度调制 PWM脉冲宽度调制 2023年10月13日 基本特性:脉冲宽度调制PWM是一种对模拟信号进行数字编码的方法。广泛引用于电机控制,灯光的亮度调节,功率控制等领域…...
LeetCode题练习与总结:二叉树的前序遍历--144
一、题目描述 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例 1: 输入:root [1,null,2,3] 输出:[1,2,3]示例 2: 输入:root [] 输出:[]示例 3: 输入:roo…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...
【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error
在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...
React从基础入门到高级实战:React 实战项目 - 项目五:微前端与模块化架构
React 实战项目:微前端与模块化架构 欢迎来到 React 开发教程专栏 的第 30 篇!在前 29 篇文章中,我们从 React 的基础概念逐步深入到高级技巧,涵盖了组件设计、状态管理、路由配置、性能优化和企业级应用等核心内容。这一次&…...
【51单片机】4. 模块化编程与LCD1602Debug
1. 什么是模块化编程 传统编程会将所有函数放在main.c中,如果使用的模块多,一个文件内会有很多代码,不利于组织和管理 模块化编程则是将各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数声明,其他.c文…...
leetcode_69.x的平方根
题目如下 : 看到题 ,我们最原始的想法就是暴力解决: for(long long i 0;i<INT_MAX;i){if(i*ix){return i;}else if((i*i>x)&&((i-1)*(i-1)<x)){return i-1;}}我们直接开始遍历,我们是整数的平方根,所以我们分两…...
