当前位置: 首页 > 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;尤其是我们打包时…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...

Ubuntu系统多网卡多相机IP设置方法

目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机&#xff0c;交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息&#xff0c;系统版本&#xff1a;Ubuntu22.04.5 LTS&#xff1b;内核版本…...