Python 写的《桌面时钟》屏保

原代码:

# 日历式时钟
# 导入所需的库
# 作者:Hoye
# 日期:2024年12月16日
# 功能:显示当前日期、星期、时间,并显示模拟时钟
import tkinter as tk
from tkinter import ttk
import time
import math
import sys

def exit_screensaver(event=None):
    root.quit()

def draw_clock_face():
    # 清除画布
    clock_canvas.delete("all")
    
    # 获取当前时间
    current_time = time.localtime()
    hours = current_time.tm_hour % 12
    minutes = current_time.tm_min
    seconds = current_time.tm_sec
    
    # 时钟外圈
    clock_canvas.create_oval(10, 10, 390, 390, width=2, outline="#ECF0F1")
    
    # 绘制刻度和数字
    for i in range(12):
        angle = i * math.pi/6 - math.pi/2
        # 刻度线
        start_x = 200 + 190 * math.cos(angle)
        start_y = 200 + 190 * math.sin(angle)
        end_x = 200 + 180 * math.cos(angle)
        end_y = 200 + 180 * math.sin(angle)
        width = 3 if i % 3 == 0 else 1
        clock_canvas.create_line(start_x, start_y, end_x, end_y, fill="#ECF0F1", width=width)
        
        # 添加数字
        num = 12 if i == 0 else i
        text_x = 200 + 155 * math.cos(angle)
        text_y = 200 + 155 * math.sin(angle)
        clock_canvas.create_text(text_x, text_y, text=str(num), 
                               font=("Microsoft YaHei UI", 20, "bold"),
                               fill="#ECF0F1")
    
    # 时针
    hour_angle = (hours + minutes/60) * math.pi/6 - math.pi/2
    hour_x = 200 + 100 * math.cos(hour_angle)
    hour_y = 200 + 100 * math.sin(hour_angle)
    clock_canvas.create_line(200, 200, hour_x, hour_y, fill="#3498DB", width=8)
    
    # 分针
    min_angle = minutes * math.pi/30 - math.pi/2
    min_x = 200 + 140 * math.cos(min_angle)
    min_y = 200 + 140 * math.sin(min_angle)
    clock_canvas.create_line(200, 200, min_x, min_y, fill="#ECF0F1", width=6)
    
    # 秒针
    sec_angle = seconds * math.pi/30 - math.pi/2
    sec_x = 200 + 160 * math.cos(sec_angle)
    sec_y = 200 + 160 * math.sin(sec_angle)
    clock_canvas.create_line(200, 200, sec_x, sec_y, fill="#BDC3C7", width=2)
    
    # 中心点
    clock_canvas.create_oval(195, 195, 205, 205, fill="#3498DB")
    
    # 每秒更新
    root.after(1000, draw_clock_face)

def update_clock():
    current_time = time.localtime()
    
    year = current_time.tm_year
    month = current_time.tm_mon
    day = current_time.tm_mday
    weekday = current_time.tm_wday
    hours = current_time.tm_hour
    minutes = current_time.tm_min
    seconds = current_time.tm_sec

    date_str = f"{year}年{month:02d}月{day:02d}日"
    weekday_str = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"][weekday]
    time_str = f"{hours:02d}:{minutes:02d}:{seconds:02d}"

    date_label.config(text=date_str)
    weekday_label.config(text=weekday_str)
    time_label.config(text=time_str)

    root.after(1000, update_clock)

# 创建主窗口
root = tk.Tk()
root.title("蓝动力电脑-桌面时钟")

# 设置全屏
root.attributes('-fullscreen', True)  # 全屏显示
root.attributes('-topmost', True)     # 窗口置顶
root.config(cursor="none")           # 隐藏鼠标光标

# 绑定退出事件
root.bind('<Key>', exit_screensaver)        # 任意键退出
root.bind('<Motion>', exit_screensaver)     # 鼠标移动退出
root.bind('<Button>', exit_screensaver)     # 鼠标点击退出
root.bind('<Escape>', exit_screensaver)     # ESC键退出

# 获取屏幕尺寸
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()

# 设置背景渐变色
main_frame = tk.Frame(root)
main_frame.pack(expand=True, fill='both')
main_frame.configure(bg='#2C3E50')

# 创建内容框架
content_frame = tk.Frame(main_frame, bg='#2C3E50', padx=20, pady=20)
content_frame.pack(expand=True)

# 创建左侧模拟时钟框架
analog_frame = tk.Frame(content_frame, bg='#34495E', padx=30, pady=30)
analog_frame.pack(side='left', padx=20)

# 创建模拟时钟画布
clock_canvas = tk.Canvas(
    analog_frame,
    width=400,
    height=400,
    bg='#34495E',
    highlightthickness=0
)
clock_canvas.pack()

# 创建右侧数字时钟容器
clock_frame = tk.Frame(content_frame, bg='#34495E', padx=30, pady=30)
clock_frame.pack(side='right', padx=20)

# 日期标签
date_label = tk.Label(
    clock_frame,
    font=("Microsoft YaHei UI", 48, "bold"),
    fg="#ECF0F1",
    bg="#34495E"
)
date_label.pack(pady=20)

# 星期标签
weekday_label = tk.Label(
    clock_frame,
    font=("Microsoft YaHei UI", 36),
    fg="#BDC3C7",
    bg="#34495E"
)
weekday_label.pack(pady=20)

# 时间标签
time_label = tk.Label(
    clock_frame,
    font=("Microsoft YaHei UI", 120, "bold"),
    fg="#3498DB",
    bg="#34495E"
)
time_label.pack(pady=30)

# 添加版权信息
footer_label = tk.Label(
    main_frame,
    text="蓝动力电脑 © 2024",
    font=("Microsoft YaHei UI", 14),
    fg="#95A5A6",
    bg="#2C3E50"
)
footer_label.pack(side='bottom', pady=15)

# 启动时钟更新
update_clock()
draw_clock_face()

# 启动主循环
root.mainloop()

代码简说:

1. 添加了 exit_screensaver 函数处理退出事件  

2. 设置窗口属性:  

• root.attributes('-fullscreen', True) 实现全屏显示  

• root.attributes('-topmost', True) 使窗口始终置顶  

• root.config(cursor="none") 隐藏鼠标光标  

3. 绑定各种退出事件:  

• 键盘按键  

• 鼠标移动  

• 鼠标点击 

打包成exe 再改 成 .scr

setup.py

import PyInstaller.__main__

PyInstaller.__main__.run([
    '9_日历式时钟.py',
    '--name=蓝动力时钟屏保',
    '--noconsole',
    '--onefile',
    # '--icon=clock.ico',  # 如果您有图标文件的话
    '--windowed',
])

py setup.py

1. 打包完成后,在 dist 目录下找到生成的 exe 文件  

2. 将 exe 文件复制一份,改名为 .scr 后缀  • 例如:蓝动力时钟屏保.exe → 蓝动力时钟屏保.scr  

3. 将 .scr 文件复制到 Windows 系统目录:

 • 通常是 C:\Windows\System32

 • 或者 C:\Windows\SysWOW64(64位系统)

 4. 在 Windows 设置中设置屏保:

 • 右键桌面 → 个性化

 • 锁屏界面 → 屏幕保护程序设置

 • 在屏幕保护程序下拉菜单中选择"蓝动力时钟屏保"

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/937629.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

51c自动驾驶~合集41

我自己的原文哦~ https://blog.51cto.com/whaosoft/12830614 #SFPNet 迈向通用Lidar分割&#xff01;取代Transformer的新架构SFPNet 迈向通用激光雷达语义分割&#xff08;&#xff09;&#xff0c;取代Transformer的新架构SFPNet&#xff0c;新数据集S.MID 论文标题&am…

前端之CSS光速入门

一、CSS介绍 什么是CSS? CSS(Cascading Style Sheet),层叠样式表,用于控制页面的样式. CSS能够对网页中元素位置的排版进行像素级的精确控制,实现美化页面的效果.能够做到页面的样式和结构分离.&#xff08;CSS可以理解为"东方四大邪术"的化妆术.对页面展示进行化…

P8615 拼接平方数 P8699 排列数

文章目录 [蓝桥杯 2014 国 C] 拼接平方数[蓝桥杯 2019 国 B] 排列数 [蓝桥杯 2014 国 C] 拼接平方数 题目描述 小明发现 49 49 49 很有趣&#xff0c;首先&#xff0c;它是个平方数。它可以拆分为 4 4 4 和 9 9 9&#xff0c;拆分出来的部分也是平方数。 169 169 169 也有…

【AIGC】结构化的力量:ChatGPT 如何实现高效信息管理

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;结构化的定义 &#xff08;Structuration: Definition&#xff09;1. 结构化的定义2. 结构化的示例3. 技术领域中的结构化数据 &#x1f4af;有序的规则的重要…

如何实现日期选择窗口

文章目录 1 概念介绍2 使用方法3 示例代码我们在上一章回中介绍了TimePicker Widget相关的内容,本章回中将介绍DatePickerDialog Widget.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 我们在这里说的DatePickerDialog是一种弹出窗口,只不过窗口的内容固定显示为日期,它…

开启数字化时代心理服务新篇章:专属线上心理咨询服务小程序

在当今快节奏的社会中&#xff0c;心理健康问题日益受到人们的关注。然而&#xff0c;传统的心理咨询模式往往受限于时间和地点&#xff0c;使得许多人在寻求心理帮助时感到不便。与此同时&#xff0c;心理课程的传播也面临着诸多挑战&#xff0c;如何高效地触达目标客户群体&a…

ElasticSearch 简介

一、什么是 ElastcSearch&#xff1f; ElasticSearch 是基于 Lucene 的 Restful 的分布式实时全文搜索引擎。 1.1 ElasticSearh 的基本术语概念 index 索引 索引类似与 mysql 中的数据库&#xff0c;ES 中的索引是存储数据的地方&#xff0c;包含了一堆有相似结构的文档数据…

条件概率相关公式

条件概率 条件概率是指在事件 B 已经发生的情况下&#xff0c;事件 A 发生的概率&#xff0c;记作 P(A∣B) 。其定义公式为&#xff1a; &#xff08; P(B) > 0 &#xff09; 全概率公式 全概率公式用于计算由一组互斥且完备的事件构成的事件的概率。设 是一组互斥且完备…

【C++】C++11(lambda、可变参数模板、包装器、线程库)

&#x1f308;个人主页&#xff1a;秦jh_-CSDN博客&#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/qinjh_/category_12575764.html?spm1001.2014.3001.5482 ​ 目录 前言 lambda表达式 C98中的一个例子 lambda表达式语法 函数对象与lambda表达式 新的类功能…

12.11数据结构-图

无向完全图&#xff1a;在无向图中&#xff0c;如果任意两个顶点之间都存在边&#xff0c;则称该图为无向完全图。 有向完全图&#xff1a;在有向图中&#xff0c;如果任意两个顶点之间都存在方向相反的两条弧&#xff0c;则称该图为有向完全图。 含有n个顶点的无向完全图有…

深度学习作业 - 作业十一 - LSTM

问题一 推导LSTM网络中参数的梯度&#xff0c;并的分析其避免梯度消失的效果 LSTM网络是为了解简单RNN中存在的长程依赖问题而提出的一种新型网络结构&#xff0c;其主要思想是通过引入门控机制来控制数据的流通&#xff0c;门控机制包括输入门、遗忘门与输出门&#xff0c;同…

Sigrity System Explorer DC IR Drop Analysis模式进行直流压降仿真分析操作指导

Sigrity System Explorer DC IR Drop Analysis模式进行直流压降仿真分析操作指导 Sigrity System Explorer DC IR Drop Analysis模式可以用于直流压降仿真分析,通过搭建简易拓扑用于前仿真分析,下面搭建一个简易的直流系统进行说明,以下图为例,准备好PCB的SPICE模型SpiceNe…

华为HarmonyOS实现跨多个子系统融合的场景化服务 -- 4 设置打开App Button

场景介绍 本章节将向您介绍如何使用Button组件打开APP功能&#xff0c;可调用对应Button组件打开另一个应用。 效果图展示 单击“打开APP”按钮&#xff0c;出现提示弹窗&#xff0c;单击“允许”&#xff0c;跳转至新的应用界面。 说明 弹窗是否弹出以及弹窗效果与跳转目标…

Spring Security 6 系列之二 - 基于数据库的用户认证和认证原理

之所以想写这一系列&#xff0c;是因为之前工作过程中使用Spring Security&#xff0c;但当时基于spring-boot 2.3.x&#xff0c;其默认的Spring Security是5.3.x。之后新项目升级到了spring-boot 3.3.0&#xff0c;结果一看Spring Security也升级为6.3.0&#xff0c;关键是其风…

[笔记] Ubuntu Server 24.04安装MySql8,并配置远程连接

1、MySql安装 #更新列表 sudo apt update ​ #安装mysql sudo apt install mysql-server ​ #运行状态 mysql sudo service mysql status ​ # 安装完成&#xff0c;已自动启动&#xff0c;该步可以不用 启动 mysql sudo /etc/init.d/mysql start ​ # 该步骤可以不配置&…

软件开发中 Bug 为什么不能彻底消除

在软件开发中&#xff0c;Bug无法彻底消除的原因主要包括&#xff1a;软件复杂度高、人员认知与沟通受限、需求和环境不断变化、工具与测试覆盖不足、经济与时间成本制约。其中“需求和环境不断变化”尤为关键&#xff0c;因为在实际开发中&#xff0c;业务逻辑随着市场与用户反…

使用ElasticSearch实现全文检索

文章目录 全文检索任务描述技术难点任务目标实现过程1. java读取Json文件&#xff0c;并导入MySQL数据库中2. 利用Logstah完成MySQL到ES的数据同步3. 开始编写功能接口3.1 全文检索接口3.2 查询详情 4. 前端调用 全文检索 任务描述 在获取到数据之后如何在ES中进行数据建模&a…

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(三)

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(三) 你好,我是拉依达。 感谢所有阅读关注我的同学支持,目前博客累计阅读 27w,关注1.5w人。其中博客《最全Linux驱动开发全流程详细解析(持续更新)-CSDN博客》已经是 Linux驱动 相关内容搜索的推荐首位,感谢大家支持。 《拉…

调用完BAPI_PO_CREATE1创建采购订单之后,如果不调用BAPI_TRANSACTION_COMMIT,数据库里面没有数

在调用完BAPI_PO_CREATE1创建采购订单之后&#xff0c;如果不调用BAPI_TRANSACTION_COMMIT&#xff0c;那么就无法生成真正的采购订单号&#xff0c;在数据库里面没有数 运行结果 特别注意

linux(CentOS8)安装PostgreSQL16详解

文章目录 1 下载安装包2 安装3 修改远程连接4 开放端口 1 下载安装包 官网下载地址&#xff1a;https://www.postgresql.org/download/ 选择对应版本 2 安装 #yum源 yum -y install wget https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redha…