1. 简介
这是一个使用 python 和 tkinter 库实现的透明数字时钟应用。该应用展示了如何创建一个没有标题栏、背景透明的时钟窗口,并提供了多个自定义功能,如字体大小调整、时钟颜色更改、窗口透明度设置和窗口拖动功能。适合用于桌面上常驻显示时间的用户,且操作简单、界面清晰。
功能:
透明背景与可拖动窗口:窗口背景透明,用户可以随意拖动时钟位置,窗口无标题栏,简洁而不影响显示。
时钟实时更新: 时钟每秒更新,自动显示当前的小时、分钟和秒钟。
动态调整字体大小: 通过右键菜单提供放大或缩小字体的选项,让用户根据需求调整字体显示大小。
时钟颜色自定义: 支持通过颜色选择器更改时钟数字的颜色,用户可以自由选择喜欢的颜色。
透明度设置: 右键菜单提供透明度调节选项,用户可以设置窗口的透明度,满足不同使用场景的需求。
右键菜单操作: 右键点击窗口弹出菜单,提供更多功能选项,包括字体调整、颜色选择、透明度设置以及关闭时钟功能。
2. 运行效果
3. 相关源码
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()
4. 总结
该透明数字时钟应用通过 python 和 tkinter 构建,提供了丰富的自定义功能。无论是字体的大小、时钟颜色,还是窗口透明度,都可以根据用户需求灵活调整。通过简单的右键菜单操作,用户可以方便地控制时钟外观,提升桌面使用体验。此应用适合需要常驻时间显示的用户,并能根据不同的使用环境提供适应性调整,具有很好的实用性和可定制性。
到此这篇关于python实现透明数字时钟效果的文章就介绍到这了,更多相关python透明数字时钟内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论