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

Python 透明数字时钟

Python 透明数字时钟

相关资源文件已经打包成EXE文件,可双击直接运行程序,且文章末尾已附上相关源码,以供大家学习交流,博主主页还有更多Python相关程序案例,秉着开源精神的想法,望大家喜欢,点个关注不迷路!!!

1. 简介:

这是一个使用 Python 和 Tkinter 库实现的透明数字时钟应用。该应用展示了如何创建一个没有标题栏、背景透明的时钟窗口,并提供了多个自定义功能,如字体大小调整、时钟颜色更改、窗口透明度设置和窗口拖动功能。适合用于桌面上常驻显示时间的用户,且操作简单、界面清晰。

功能:

  1. 透明背景与可拖动窗口:窗口背景透明,用户可以随意拖动时钟位置,窗口无标题栏,简洁而不影响显示。
  2. 时钟实时更新: 时钟每秒更新,自动显示当前的小时、分钟和秒钟。
  3. 动态调整字体大小: 通过右键菜单提供放大或缩小字体的选项,让用户根据需求调整字体显示大小。
  4. 时钟颜色自定义: 支持通过颜色选择器更改时钟数字的颜色,用户可以自由选择喜欢的颜色。
  5. 透明度设置: 右键菜单提供透明度调节选项,用户可以设置窗口的透明度,满足不同使用场景的需求。
  6. 右键菜单操作: 右键点击窗口弹出菜单,提供更多功能选项,包括字体调整、颜色选择、透明度设置以及关闭时钟功能。

2. 运行效果:

请添加图片描述
在这里插入图片描述

3. 总结:

该透明数字时钟应用通过 Python 和 Tkinter 构建,提供了丰富的自定义功能。无论是字体的大小、时钟颜色,还是窗口透明度,都可以根据用户需求灵活调整。通过简单的右键菜单操作,用户可以方便地控制时钟外观,提升桌面使用体验。此应用适合需要常驻时间显示的用户,并能根据不同的使用环境提供适应性调整,具有很好的实用性和可定制性。

4. 相关源码:

import tkinter as tk
from tkinter import font, colorchooser
import time

# 创建窗口
root = tk.Tk()
root.title("透明数字时钟")

# 获取屏幕宽度和高度
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()

# 设置窗口的初始大小和透明背景
root.geometry("360x120+{}+0".format(screen_width - 360))  # 将窗口放在右上角,宽度为360,高度为120
root.config(bg='black')  # 背景设为黑色,透明窗口的效果
root.overrideredirect(True)  # 去掉窗口的标题栏
root.attributes("-topmost", True)  # 确保窗口在最上层
root.attributes("-transparentcolor", "black")  # 设置透明背景颜色

# 设置初始字体
time_font = font.Font(family="Segoe UI", size=50, weight="bold")
label = tk.Label(root, bg="black", fg="red", font=time_font)
label.pack(expand=True)

# 定义拖动窗口的函数
def on_press(event):
    """记录点击位置"""
    root.x = event.x
    root.y = event.y

def on_drag(event):
    """更新窗口位置"""
    deltax = event.x - root.x
    deltay = event.y - root.y
    root.geometry(f"+{root.winfo_x() + deltax}+{root.winfo_y() + deltay}")

# 绑定鼠标事件
root.bind("<Button-1>", on_press)  # 当鼠标按下时记录位置
root.bind("<B1-Motion>", on_drag)  # 当鼠标拖动时更新窗口位置

# 更新时钟的函数
def update_time():
    """更新时钟显示"""
    current_time = time.strftime("%H:%M:%S")  # 获取当前时间,格式为时:分:秒
    label.config(text=current_time)
    label.after(1000, update_time)  # 每秒更新一次

# 调整窗口大小以适应字体
def adjust_window_size():
    """调整窗口大小,以适应字体"""
    font_size = time_font.cget("size")
    window_width = font_size * 7  # 假设宽度为字体大小的7倍
    window_height = font_size * 3  # 假设高度为字体大小的3倍

    # 获取当前窗口位置
    current_x = root.winfo_x()
    current_y = root.winfo_y()

    # 调整窗口大小,但保留当前窗口位置
    root.geometry(f"{window_width}x{window_height}+{current_x}+{current_y}")

# 放大字体
def increase_font_size():
    current_size = time_font.cget("size")
    new_size = current_size + 2  # 每次放大2个单位
    time_font.config(size=new_size)
    adjust_window_size()  # 调整窗口大小

# 缩小字体
def decrease_font_size():
    current_size = time_font.cget("size")
    new_size = max(current_size - 2, 10)  # 每次缩小2个单位,最低为10
    time_font.config(size=new_size)
    adjust_window_size()  # 调整窗口大小

# 更改时钟显示颜色
def change_color():
    """打开颜色选择器让用户选择时钟前景色"""
    color = colorchooser.askcolor()[1]  # 返回一个元组,第二个值是颜色的十六进制值
    if color:
        label.config(fg=color)  # 设置时钟显示的颜色

# 调整透明度
def adjust_opacity(value):
    """调整窗口透明度"""
    root.attributes("-alpha", value)

# 创建右键菜单
def create_menu(event):
    """创建并显示菜单"""
    if root.winfo_exists():  # 确保窗口没有销毁
        menu = tk.Menu(root, tearoff=0)
        menu.add_command(label="放大字体", command=increase_font_size)  # 放大字体
        menu.add_command(label="缩小字体", command=decrease_font_size)  # 缩小字体
        menu.add_command(label="更改时钟颜色", command=change_color)  # 更改时钟颜色
        
        # 创建透明度设置二级菜单
        opacity_menu = tk.Menu(menu, tearoff=0)
        opacity_menu.add_command(label="设置透明度 80%", command=lambda: adjust_opacity(0.8))  # 设置透明度为80%
        opacity_menu.add_command(label="设置透明度 60%", command=lambda: adjust_opacity(0.6))  # 设置透明度为60%
        opacity_menu.add_command(label="设置透明度 40%", command=lambda: adjust_opacity(0.4))  # 设置透明度为40%
        opacity_menu.add_command(label="设置透明度 20%", command=lambda: adjust_opacity(0.2))  # 设置透明度为20%
        opacity_menu.add_command(label="完全不透明", command=lambda: adjust_opacity(1))  # 完全不透明
        
        menu.add_cascade(label="透明度设置", menu=opacity_menu)  # 将透明度菜单添加到主菜单中
        
        menu.add_separator()
        menu.add_command(label="关闭时钟", command=root.destroy)  # 关闭时钟
        menu.post(event.x_root, event.y_root)  # 在鼠标点击的位置弹出菜单
    else:
        print("窗口已销毁,无法显示菜单。")

# 绑定右键点击事件,显示菜单
def on_right_click(event):
    """处理右键点击并弹出菜单"""
    if root.winfo_exists():  # 确保窗口存在
        create_menu(event)  # 创建右键菜单
    else:
        print("窗口已销毁,无法处理右键菜单。")

root.bind("<Button-3>", on_right_click)  # 右键点击时弹出菜单

# 启动时钟更新
update_time()

# 初始调整窗口大小
adjust_window_size()

# 使窗口透明并显示
root.mainloop()

http://www.kler.cn/a/542027.html

相关文章:

  • SQL Server安装流程
  • 游戏引擎学习第96天
  • 鸿蒙harmony 手势密码
  • 【深度学习】多目标融合算法(四):多门混合专家网络MMOE(Multi-gate Mixture-of-Experts)
  • 工作中常用的jmeter自带函数有哪些?
  • apache-poi导出excel数据
  • 独立站赋能反向海淘:跨境代购系统的用户体验与支付解决方案
  • 2025.2.10 每日学习记录3:技术报告只差相关工作+补实验
  • 在npm上传属于自己的包
  • 【RabbitMQ的x-death头】消息死亡记录头流转示例
  • 攻防世界32 very_easy_sql【SSRF/SQL时间盲注】
  • android的第一个app项目(java版)
  • C++ Primer 简单语句
  • webpack配置之---output.publicPath
  • 【机器学习】 特征归一化的重要性及方式
  • 【Day37 LeetCode】动态规划DP Ⅹ 子序列问题
  • centos 8和centos 9 stream x64的区别
  • 寒假集训思维训练5题解
  • VSCode|IDEA|PyCharm接入DeepSeek R1
  • 【数据结构-Tire树】力扣1268. 搜索推荐系统
  • 如何在本地部署deepseek?
  • 【目标检测json2txt】label从COCO格式json文件转YOLO格式txt文件
  • 具身智能训练新思路!将生成视频用于训练机器人
  • SpringBoot旧物置换网站
  • 301.华为交换机堆叠技术基础
  • 拯救者Y9000P双系统ubuntu22.04安装4070显卡驱动