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

使用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: 表格列组件&#xff0c;定义每列的展示内容和属性 --><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&#xff1a;else if range语句&#xff1a; continue continue的作用是&#xff1a; 中断所在循环的当次执行&#xff0c;直接进入下一次 continue在嵌套循环中的应用 break 直接结束所在的循环 break在嵌套循环中的应用 continue和break&#xff0c;在…...

【stm32】大一上学期笔记复制

砌墙单片机 外设是什么&#xff1f; ipage 8 nx轴 128 X0-127 y0-63 PWM脉冲宽度调制 PWM脉冲宽度调制 2023年10月13日 基本特性&#xff1a;脉冲宽度调制PWM是一种对模拟信号进行数字编码的方法。广泛引用于电机控制&#xff0c;灯光的亮度调节&#xff0c;功率控制等领域…...

LeetCode题练习与总结:二叉树的前序遍历--144

一、题目描述 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,2,3]示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[]示例 3&#xff1a; 输入&#xff1a;roo…...

江西某石灰石矿边坡自动化监测

1. 项目简介 该矿为露天矿山&#xff0c;开采矿种为水泥用石灰岩&#xff0c;许可生产规模200万t/a&#xff0c;矿区面积为1.2264km2&#xff0c;许可开采深度为422m&#xff5e;250m。矿区地形为东西一北东东向带状分布&#xff0c;北高南低&#xff0c;北部为由浅变质岩系组…...

图解深度学习 - 基于梯度的优化(梯度下降)

在模型优化过程中&#xff0c;我们曾尝试通过手动调整单个标量系数来观察其对损失值的影响。具体来说&#xff0c;当初始系数为0.3时&#xff0c;损失值为0.5。随后&#xff0c;我们尝试增加系数至0.35&#xff0c;发现损失值上升至0.6&#xff1b;相反&#xff0c;当系数减小至…...

历年西安交通大学计算机保研上机真题

2025西安交通大学计算机保研上机真题 2024西安交通大学计算机保研上机真题 2023西安交通大学计算机保研上机真题 在线测评链接&#xff1a;https://pgcode.cn/school 计算圆周率近似值 题目描述 根据公式 π / 4 1 − 1 / 3 1 / 5 − 1 / 7 … \pi / 4 1 - 1/3 1/5 - …...

Java构建Tree并实现节点名称模糊查询

乐于学习分享… 大家加油努力 package com.tom.backtrack;import lombok.Data; import lombok.Getter;import java.util.ArrayList; import java.util.List; import java.util.Objects;/*** 树节点** author zx* date 2025-05-27 19:51*/ Data public class TreeNode {private …...

GEARS以及与基础模型结合

理解基因扰动的反应是众多生物医学应用的核心。然而&#xff0c;可能的多基因扰动组合数量呈指数级增长&#xff0c;严重限制了实验探究的范围。在此&#xff0c;图增强基因激活与抑制模拟器&#xff08;GEARS&#xff09;&#xff0c;将深度学习与基因-基因关系知识图谱相结合…...

ES分词搜索

ES的使用 前言作者使用的版本作者需求 简介ES简略介绍ik分词器简介 使用es的直接简单使用es的查询 es在java中使用备注说明 前言 作者使用的版本 es: 7.17.27spring-boot-starter-data-elasticsearch: 7.14.2 作者需求 作者接到一个业务需求&#xff0c;我们系统有份数据被…...

【HTML/CSS面经】

HTML/CSS面经 HTML1. script标签中的async和defer的区别2. H5新特性&#xff08;1 标签语义化&#xff08;2 表单功能增强&#xff08;3 音频和视频标签&#xff08;4 canvas和svg绘画&#xff08;5 地理位置获取&#xff08;6 元素拖动API&#xff08;7 Web Worker&#xff08…...

vue3 ElMessage提示语换行渲染

在 ElMessage.error 中使用换行符 \n 并不会实现换行&#xff0c;因为 ElMessage 默认会将字符串中的换行符忽略。要实现换行显示&#xff0c;可以使用 HTML 标签 <br> 并结合 ElMessage 的 dangerouslyUseHTMLString 选项。以下是实现换行提示的代码示例&#xff1a; i…...

PostgreSQL日常运维

目录 一、PostgreSQL基础操作 1.1 登录数据库 1.2 数据库管理 1.3 数据表操作 二、数据备份与恢复 2.1 备份工具pg_dump 2.2 恢复工具pg_restore与psql 2.3 备份策略建议 三、模式&#xff08;Schema&#xff09; 3.1 模式的核心作用 3.2 模式操作全流程 四、远程连…...

选择if day5

5.scanf&#xff08;“空白符”&#xff09; 空白符作用表示匹配任意多个空白符 进入了内存缓冲区&#xff08;本质就是一块内存空间&#xff09; 6.scanf读取问题&#xff1a; a.遇到非法字符读取结束 2. %*d * 可以跳过一个字符 eg&#xff1a;%d%*d%d 读取第一和第三个字符…...