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

python PyQt5 数字时钟程序

效果图:

在这里插入图片描述

概述

本文档将指导您如何使用Python的PyQt5库创建一个简单的时钟程序。该程序将显示当前时间,并具有以下特性:

  • 始终在最前台显示。
  • 窗口可拖动。
  • 鼠标右键点击窗口可弹出退出菜单。
  • 时间标签具有红色渐变效果。
  • 窗口初始化时出现在屏幕的右上角。

环境准备

在开始之前,请确保您的Python环境已安装PyQt5库。如果尚未安装,可以通过以下命令安装:

pip install PyQt5

代码解释

导入所需模块

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QMenu, QAction
from PyQt5.QtCore import QTimer, Qt, QPoint
from PyQt5.QtGui import QFont, QPalette, QColor, QLinearGradient, QPainter, QPen
from datetime import datetime

这里导入了PyQt5库中的各种组件,包括应用程序、窗口小部件、布局、定时器、事件处理等。

创建时钟窗口类

class AlwaysOnTopClock(QWidget):def __init__(self):super().__init__()self.initUI()

AlwaysOnTopClock 类继承自 QWidget,是应用程序的主窗口。

初始化用户界面

    def initUI(self):# 设置窗口属性,允许拖动和始终在最前self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)# 设置窗口标题和初始位置、大小self.setWindowTitle('始终在最前台显示的时钟')self.setGeometry(QApplication.desktop().screen().rect().right() - 300, QApplication.desktop().screen().rect().top() + 10, 300, 80)

这里设置了窗口的基本属性,包括去除边框、始终在最前等。

创建时间标签

        # 创建垂直布局和时间标签layout = QVBoxLayout()self.time_label = QLabel('00:00:00', self)self.setGradient(self.time_label)  # 设置渐变色self.time_label.setFont(self.redFont())  # 设置字体为红色self.time_label.setAlignment(Qt.AlignCenter)  # 文本居中layout.addWidget(self.time_label)

创建了一个 QLabel 用于显示时间,并设置了字体、颜色和布局。

设置渐变色效果

    def setGradient(self, label):palette = QPalette(label.palette())gradient = QLinearGradient(0, 0, self.width(), 0)gradient.setColorAt(0.0, QColor(255, 0, 0, 255))  # 红色gradient.setColorAt(1.0, QColor(255, 0, 0, 255))  # 红色palette.setBrush(QPalette.WindowText, gradient)label.setPalette(palette)label.setAlignment(Qt.AlignCenter)

定义了一个渐变效果,使时间标签的文字具有红色渐变色。

更新时间

    def update_time(self):now = datetime.now().strftime('%H:%M:%S')self.time_label.setText(now)

定义了一个方法来更新时间标签的内容。

窗口绘制事件

    def paintEvent(self, event):painter = QPainter(self)painter.setPen(QPen(Qt.NoPen))painter.setBrush(QColor("#333"))  # 设置窗口背景颜色painter.drawRect(self.rect())

自定义窗口的绘制,设置窗口背景颜色。

鼠标事件处理

    def mousePressEvent(self, event):if event.button() == Qt.LeftButton:self.dragPos = QPoint(event.globalX() - self.x(), event.globalY() - self.y())def mouseMoveEvent(self, event):if event.buttons() == Qt.LeftButton:self.move(event.globalX() - self.dragPos.x(), event.globalY() - self.dragPos.y())

处理鼠标按下和移动事件,以实现窗口的拖动。

弹出菜单事件,右键退出

    def contextMenuEvent(self, event):menu = QMenu(self)exitAction = QAction('退出', self)exitAction.triggered.connect(QApplication.instance().quit)menu.addAction(exitAction)menu.exec_(event.globalPos())

定义了鼠标右键点击时弹出的菜单,包含退出选项。

主函数

if __name__ == '__main__':app = QApplication(sys.argv)screen_geometry = QApplication.desktop().screen().rect()  # 获取屏幕的尺寸clock = AlwaysOnTopClock()clock.show()  # 显示窗口# 将窗口移动到屏幕最右上角clock.move(screen_geometry.right() - clock.width(), screen_geometry.top())sys.exit(app.exec_())

程序的入口点,创建应用程序实例,初始化时钟窗口,并启动事件循环。

运行程序

保存代码为 py 文件,并在命令行或终端中运行它。您将看到一个始终在最前台显示的时钟窗口,窗口高度为80像素,出现在屏幕的右上角。


完整代码

from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QMenu, QAction
from PyQt5.QtCore import QTimer, Qt, QPoint
from PyQt5.QtGui import QFont, QPalette, QColor, QLinearGradient, QPainter, QPen
from datetime import datetimeclass AlwaysOnTopClock(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):# 设置窗口属性,允许拖动和始终在最前self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)self.setWindowTitle('始终在最前台显示的时钟')self.setGeometry(QApplication.desktop().screen().rect().right() - 300, QApplication.desktop().screen().rect().top() + 10, 300, 80)  # 设置窗口位置和大小# 创建垂直布局和时间标签layout = QVBoxLayout()self.time_label = QLabel('00:00:00', self)self.setGradient(self.time_label)  # 设置渐变色self.time_label.setFont(self.redFont())  # 设置字体为红色self.time_label.setAlignment(Qt.AlignCenter)  # 文本居中layout.addWidget(self.time_label)self.setLayout(layout)# 创建定时器更新时间self.timer = QTimer(self)self.timer.timeout.connect(self.update_time)self.timer.start(1000)  # 每秒更新一次def update_time(self):now = datetime.now().strftime('%H:%M:%S')self.time_label.setText(now)def setGradient(self, label):palette = QPalette(label.palette())gradient = QLinearGradient(0, 0, self.width(), 0)gradient.setColorAt(0.0, QColor(255, 0, 0, 255))  # 红色gradient.setColorAt(1.0, QColor(255, 0, 0, 255))  # 红色palette.setBrush(QPalette.WindowText, gradient)label.setPalette(palette)label.setAlignment(Qt.AlignCenter)def redFont(self):font = QFont("Helvetica", 24)  # 根据窗口大小调整字体大小font.setBold(True)return fontdef paintEvent(self, event):painter = QPainter(self)painter.setPen(QPen(Qt.NoPen))painter.setBrush(QColor("#333"))  # 设置窗口背景颜色painter.drawRect(self.rect())def mousePressEvent(self, event):if event.button() == Qt.LeftButton:self.dragPos = QPoint(event.globalX() - self.x(), event.globalY() - self.y())def mouseMoveEvent(self, event):if event.buttons() == Qt.LeftButton:self.move(event.globalX() - self.dragPos.x(), event.globalY() - self.dragPos.y())def contextMenuEvent(self, event):menu = QMenu(self)exitAction = QAction('退出', self)exitAction.triggered.connect(QApplication.instance().quit)menu.addAction(exitAction)menu.exec_(event.globalPos())
if __name__ == '__main__':app = QApplication(sys.argv)screen_geometry = QApplication.desktop().screen().rect()  # 获取屏幕的尺寸clock = AlwaysOnTopClock()clock.show()  # 显示窗口# 将窗口移动到屏幕最右上角clock.move(screen_geometry.right() - clock.width(), screen_geometry.top())sys.exit(app.exec_())

相关文章:

python PyQt5 数字时钟程序

效果图: 概述 本文档将指导您如何使用Python的PyQt5库创建一个简单的时钟程序。该程序将显示当前时间,并具有以下特性: 始终在最前台显示。窗口可拖动。鼠标右键点击窗口可弹出退出菜单。时间标签具有红色渐变效果。窗口初始化时出现在屏幕…...

骨传导耳机哪个品牌值得入手?精选五大不容错过的王者品牌推荐!

尽管骨传导耳机作为新型蓝牙耳机问世不久,但凭借其独特的传音方式和舒适的佩戴体验,已经迅速在市场上崭露头角,赢得了广大音乐爱好者和运动达人的青睐。然而,随着骨传导耳机热度增高,市场上开始出现一些品质参差不齐的…...

Vue.js|项目安装

根据Vue脚手架创建出来的项目目录: 运行项目: 控制台中输入下面的命令: npm run serve 修改vue项目运行端口: 前往vue.config.js中添加下面的代码: devServer: {port: 7000} 接着前往控制台输入Ctrlc关闭项目&…...

多线程新手村4--定时器

定时器是日常开发中很常见的组件,定时器大家可能不知道是干什么的,但是定时炸弹肯定都听过,定个时间,过一段时间后bomb!!!爆炸 定时器的逻辑和这个一样,约定一个时间,这…...

如何衡量安全阀检测的价格与价值?一文揭晓答案

安全阀作为工业设备中的重要组件,其性能的稳定性和可靠性直接影响着整个系统的安全运行。因此,对安全阀进行定期检测和维护显得尤为重要。 那么,安全阀检测一个需要多少钱呢? 在这篇文章中,佰德将从检测费用构成、市…...

Sectigo证书介绍以及申请流程

Sectigo (原Comodo CA)是全球SSL证书市场占有率最高的CA公司,目前将近40%的SSL证书用户选择了Sectigo。由于其产品安全,价格低,受到大量站长的信任和欢迎。Sectigo旗下的SSL证书品牌包括Sectigo, Positive SSL, Sectigo Enterprise等。 品牌…...

网络安全-钓鱼篇-利用cs进行钓鱼

一、环境 自行搭建,kill,Windows10,cs 二、原理 如图所示 三、钓鱼演示 首先第一步:打开System Profiler-分析器功能 选择克隆www.baidu.com页面做钓鱼 之后我们通过包装域名,各种手段让攻击对象访问:h…...

机器学习-6-对随机梯度下降算法SGD的理解

参考一文带您了解随机梯度下降(Stochastic Gradient Descent):python代码示例 参考sklearn-SGDClassifier 1 梯度下降 在机器学习领域,梯度下降扮演着至关重要的角色。梯度下降是一种优化算法,通过迭代沿着由梯度定义的最陡下降方向,以最小化函数。类似于图中的场景,可以…...

windows 11 精简版下载

Optimum 11 24H2 家庭版和专业版版本在性能、响应能力和资源使用方面相同,因此请下载并安装适合您笔记本电脑的正确版本或在您的 PC 上获得终极 Windows 11 24H2 体验的许可证! • 如果您熟悉我们的 22H2 和 23H2 Optimum 11 版本,此版本将…...

rpm与yum扩展、命令

目录 系统安装软件方式 1、rpm方式 命令 yum方式 安装 更新和升级 查找与显示 删除程序 清除缓存 仅下载 系统安装软件方式 1、rpm方式 优点:无需网络安装软件 缺点:无法解决软件依赖 命令 rpm -ivh 安装 --nodeps忽略依赖关系 --force强…...

SpringBoot实现接口防抖的几种方案,杜绝重复提交

插: AI时代,程序员或多或少要了解些人工智能,前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家(前言 – 人工智能教程 ) 坚持不懈,越努力越幸运,大家…...

了解VS安全编译选项GS

缓冲区溢出攻击的基本原理就是溢出时覆盖了函数返回地址,之后就会去执行攻击者自己的函数; 针对缓冲区溢出时覆盖函数返回地址这一特征,微软在编译程序时使用了安全编译选项-GS; 目前版本的Visual Studio中默认启用了这个编译选项…...

python 垃圾回收机制

简介 在Python中,垃圾回收是自动管理内存的一个重要方面。Python使用了一种称为引用计数的策略来跟踪对象的引用数目。当对象的引用计数降为零时,Python解释器就会自动释放该对象所占用的内存空间。 除了引用计数之外,Python还使用了其他一…...

深度学习设计模式之组合模式

文章目录 前言一、介绍二、详细分析1.核心组成2.实现步骤3.代码示例4.优缺点优点缺点 5.使用场景 总结 前言 组合模式是将对象组合成树形结构来表现"整体/部分"层次结构,可以更好的实现管理操作。 一、介绍 组合设计模式又叫部分整体模式,将…...

C++ 网络编程

一、Reactor 网络编程模型 reactor 是一个事件处理模型。网络处理:因为用户层并不知道 IO 什么时候就绪,所以将对 IO 的处理转化为对事件的处理。网络模型构成: 非阻塞 IO:操作 IO,如果 IO 未就绪,IO 函数会立刻返回。IO 多路复用:检测多路 IO 是否就绪。工作流程: 注册…...

服务案例|网络攻击事件的排查与修复

LinkSLA智能运维管家V6.0版支持通过SNMP Trap对设备进行监控告警,Trap是一种主动推送网络设备事件或告警消息的方式,与SNMP轮询(polling)不同,具有以下几点优势: 1. 实时监控与快速响应 SNMP Trap能够实时…...

如何使用宝塔面板搭建Tipask问答社区网站并发布公网远程访问

文章目录 前言1.Tipask网站搭建1.1 Tipask网站下载和安装1.2 Tipask网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2 Cpolar稳定隧道(云端设置)2.3 Cpolar稳定隧道(本地设置) 3. 公网访问测试4.结语 前…...

Git学习和使用指南简单篇

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…...

HTTPS单双向认证流程详解与联想

HTTPS单向认证 HTTPS在单向认证传输的过程中会涉及到三个密钥: 服务端的公钥和私钥,用来进行非对称加密交换密钥 客户端生成的随机密钥,用来进行对称加密传输数据 认证过程 1.客户端向服务器发起HTTPS请求,连接到服务器的443端…...

防止浏览器缓存了静态的配置等文件(例如外部的config.js 等文件)

防止浏览器缓存了静态的配置文件 前言1、在script引入的时候添加随机数1.1、引入js文件1.2、引入css文件 2、通过html文件的<meta>设置防止缓存3、使用HTTP响应头&#xff1a; 前言 在实际开发中浏览器的缓存问题一直是一个很让人头疼的问题&#xff0c;尤其是我们打包时…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

elementUI点击浏览table所选行数据查看文档

项目场景&#xff1a; table按照要求特定的数据变成按钮可以点击 解决方案&#xff1a; <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...

HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散

前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说&#xff0c;在叠衣服的过程中&#xff0c;我会带着团队对比各种模型、方法、策略&#xff0c;毕竟针对各个场景始终寻找更优的解决方案&#xff0c;是我个人和我司「七月在线」的职责之一 且个人认为&#xff0c…...