首页 > 编程语言 >Python 写的《桌面时钟》屏保

Python 写的《桌面时钟》屏保

时间:2024-12-22 13:27:43浏览次数:5  
标签:200 clock Python frame 屏保 time root math 时钟

原代码:

# 日历式时钟
# 导入所需的库
# 作者: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 设置中设置屏保:

 • 右键桌面 → 个性化

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

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

 

 

标签:200,clock,Python,frame,屏保,time,root,math,时钟
From: https://blog.csdn.net/PieroPc/article/details/144520971

相关文章

  • Python创建图形用户界面(GUI):PyQt
    一、PyQt 简介定义PyQt 是一个用于创建图形用户界面(GUI)的 Python 库。它是 Qt 库的 Python 绑定,Qt 是一个跨平台的 C++ 库,广泛用于开发 GUI 应用程序、游戏开发、嵌入式系统等众多领域。PyQt 允许 Python 开发者利用 Qt 强大的功能来构建具有丰富交互性的......
  • 在Python并发编程中,进程和线程有什么区别?
    资源分配与独立性进程:进程是系统进行资源分配和调度的独立单位。每个进程都有自己独立的内存空间,包括代码段、数据段、堆栈段等。这意味着一个进程无法直接访问另一个进程的内存,不同进程之间的数据是相互隔离的。例如,当你同时打开一个文本编辑器和一个浏览器,它们是两个不同的......
  • 王者荣耀皮肤收藏家:Python爬虫桌面保存秘籍
    王者荣耀皮肤,Python爬虫带你轻松收藏在数字娱乐的世界里,王者荣耀无疑是一款深受玩家喜爱的游戏。不仅仅是因为它紧张刺激的对战模式,更因为那些设计精美、风格各异的皮肤,让每个英雄都有了独特的风采。今天,我们将一起探索如何使用Python爬虫技术,将王者荣耀的皮肤图片保存到我......
  • Python入门6:函数
    一、什么是函数?    在前面的一些作品里面,其实我们已经运用过了函数的内容了,只是之前对函数的概念还不太了解,其实我们前面用过的print()和input()等都是函数。那么什么是函数呢?举个例子,假如我们我们在公司上班,有一个查询的功能在很多个地方都要使用,那么是不是每一个程序猿......
  • Python 程序打包 exe:从代码到可执行文件的完美转换
    公众号:测试工程师成长之路一、Python打包exe之基础必备在Python的应用场景日益广泛的今天,将Python程序打包成exe文件的需求愈发凸显。一方面,这极大地方便了程序的分发,无论是分享给同事、客户,还是发布到网上供用户下载,无需对方安装Python环境,一个exe文件就......
  • 灵棋占卜的排盘程序 | Code For Python
    灵棋占卜灵棋经的排盘程序写一个程序,模拟12个棋子,50%是正面,50%是反面None。正面参与统计,12个棋子分别有4个“上”,“中”,“下”。执行程序后,统计上中下的个数,返回一个词典。两种模拟棋子起卦的方法在实现细节和逻辑上有一些差异。以下是它们的主要区别:simulate_chess_1:适......
  • 利用 Python 解决 “奇数之和” 问题
    一、问题描述在这个问题场景中,有着特定的时间和内存限制,每次测试时间限制为2秒,每个测试的内存限制为256MB。我们会获得两个整数 n 和 k,任务是判断 n 是否可以表示为 k 个不同的正奇数(不能被2整除的整数)之和,并且需要对 t 个独立的测试用例进行这样的判断操作。......
  • 用Python让两组数据纵向排序
    一、引言在数据处理和分析中,排序是一项非常基础且重要的操作。排序可以帮助我们更好地理解数据,发现数据中的模式和规律。在Python中,我们可以使用多种方法对数据进行排序。本文将详细介绍如何使用Python对两组数据进行纵向排序,即每一列分别进行排序,同时保持数据的对应关系。我们将......
  • Python模块之threading
    模块作用简介:Python模块之threadingthread模块基本被废弃了,现在多用threading模块来创建和管理子线程有两种方式来创建线程:第一种是:用class继承Thread类,并重写它的run()方法;第二种是:在实例化threading.Thread对象的时候,将线程要执行的任务函数作为参数传入线程。......
  • Python模块之thread
    模块作用简介:Python模块之thread,此模块基本废弃,建议使用threadingPython模块之threading:https://www.cnblogs.com/wutou/p/18621520官方英文帮助:https://docs.python.org/3/library/官方简体中文帮助:https://docs.python.org/zh-cn/3/library/必要操作:>>>......