Python 透明数字时钟
Python 透明数字时钟
相关资源文件已经打包成EXE文件,可双击直接运行程序,且文章末尾已附上相关源码,以供大家学习交流,博主主页还有更多Python相关程序案例,秉着开源精神的想法,望大家喜欢,点个关注不迷路!!!
1. 简介:
这是一个使用 Python 和 Tkinter 库实现的透明数字时钟应用。该应用展示了如何创建一个没有标题栏、背景透明的时钟窗口,并提供了多个自定义功能,如字体大小调整、时钟颜色更改、窗口透明度设置和窗口拖动功能。适合用于桌面上常驻显示时间的用户,且操作简单、界面清晰。
功能:
- 透明背景与可拖动窗口:窗口背景透明,用户可以随意拖动时钟位置,窗口无标题栏,简洁而不影响显示。
- 时钟实时更新: 时钟每秒更新,自动显示当前的小时、分钟和秒钟。
- 动态调整字体大小: 通过右键菜单提供放大或缩小字体的选项,让用户根据需求调整字体显示大小。
- 时钟颜色自定义: 支持通过颜色选择器更改时钟数字的颜色,用户可以自由选择喜欢的颜色。
- 透明度设置: 右键菜单提供透明度调节选项,用户可以设置窗口的透明度,满足不同使用场景的需求。
- 右键菜单操作: 右键点击窗口弹出菜单,提供更多功能选项,包括字体调整、颜色选择、透明度设置以及关闭时钟功能。
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()