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

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...