
上图是一个基于Tkinter的随机温馨提醒窗口系统,功能是创建 300 个随机位置、随机背景色、窗口,并在 10 秒后自动关闭,这些窗口可以看到很多温柔的提示语,给对方很温馨的感觉,现在我将系统思路展示如下:
本文基于指定Python代码,窗口的显示位置、背景颜色以及提示语内容均为随机生成,以此保障视觉呈现的多样性。
一、程序编写步骤:
步骤1:导入必要的库
# -*- coding: utf-8 -*- # 声明文件编码为UTF-8,支持中文
import tkinter as tk # 导入Tkinter库,用于创建GUI窗口
import random # 导入random库,用于生成随机内容
import time # 导入time库,用于处理时间相关逻辑(此处未直接使用,预留扩展)
tkinter是 Python 自带的 GUI 库,负责创建窗口和界面元素。random用于实现 “随机位置、随机提示语、随机背景色” 的核心功能。
步骤2:定义单个窗口的创建函数(create_window)
这个函数负责生成一个独立的提示窗口,包含窗口位置、内容、样式等设置:
def create_window():
# 1. 创建子窗口(使用Toplevel而非Tk,避免多主窗口冲突)
window = tk.Toplevel(root) # root是后续定义的主窗口,作为父容器
# 2. 获取屏幕宽高,用于计算窗口位置
screen_width = root.winfo_screenwidth() # 获取屏幕宽度(像素)
screen_height = root.winfo_screenheight() # 获取屏幕高度(像素)
# 3. 随机生成窗口位置(确保窗口完全显示在屏幕内)
window_width = 250 # 窗口宽度
window_height = 60 # 窗口高度
# x坐标范围:0 ~ 屏幕宽度-窗口宽度(避免窗口右侧超出屏幕)
x = random.randrange(0, screen_width - window_width)
# y坐标范围:0 ~ 屏幕高度-窗口高度(避免窗口底部超出屏幕)
y = random.randrange(0, screen_height - window_height)
# 4. 设置窗口标题和大小位置
window.title('温馨提示') # 窗口标题
# 格式:"宽x高+X坐标+Y坐标",用于固定窗口大小和位置
window.geometry(f"{window_width}x{window_height}+{x}+{y}")
# 5. 随机选择提示语
tips = [
'多喝水哦~', '保持微笑呀', '每天都要元气满满',
'记得吃水果', '保持好心情', '好好爱自己', '你很棒的',
'梦想成真', '期待下一次见面', '你好幽默',
'顺顺利利', '早点休息', '愿所有烦恼都消失',
'别熬夜', '今天过得开心嘛', '天冷了,多穿衣服'
]
tip = random.choice(tips) # 从列表中随机选一条提示语
# 6. 随机选择背景颜色
bg_colors = [
'lightpink', 'skyblue', 'lightgreen', 'lavender',
'lightyellow', 'plum', 'coral', 'bisque', 'aquamarine',
'mistyrose', 'honeydew', 'lavenderblush', 'oldlace'
]
bg = random.choice(bg_colors) # 从列表中随机选一种背景色
# 7. 创建标签组件,显示提示语
tk.Label(
window, # 父容器为当前窗口
text=tip, # 显示的文字(随机选中的提示语)
bg=bg, # 背景色(随机选中的颜色)
font=('微软雅黑', 16), # 字体和字号
width=30, # 标签宽度
height=3 # 标签高度
).pack() # 将标签添加到窗口中
# 8. 设置窗口置顶(确保不被其他窗口遮挡)
window.attributes('-topmost', True)
# 9. 10秒后自动关闭当前窗口(10000毫秒 = 10秒)
window.after(10000, window.destroy) # after(延迟时间, 执行函数):延迟后销毁窗口
return window # 返回创建的窗口对象
步骤 3:定义批量创建窗口的函数(create_multiple_windows)
这个函数通过递归调用实现批量创建窗口,避免使用多线程导致的 GUI 冲突:
def create_multiple_windows(count=300, delay=0.01):
# 递归终止条件:当窗口数量为0时,触发程序收尾
if count <= 0:
# 所有窗口创建完成后,10秒后关闭主程序(确保所有子窗口先关闭)
root.after(10000, root.destroy)
return # 结束递归
# 1. 调用create_window()创建一个窗口
create_window()
# 2. 延迟一段时间后,递归创建下一个窗口(非阻塞方式)
# after(延迟毫秒数, 函数, 参数1, 参数2):延迟后执行函数
root.after(
int(delay * 1000), # 延迟时间(转换为毫秒,0.01秒 = 10毫秒)
create_multiple_windows, # 递归调用自身
count - 1, # 窗口数量减1
delay # 保持延迟时间不变
)
- 递归逻辑:每次创建 1 个窗口后,延迟
delay秒(默认 0.01 秒),再创建下一个,直到创建完 300 个。 - 非阻塞设计:使用
root.after()替代time.sleep(),避免 GUI 界面卡顿(Tkinter 是单线程库,sleep会阻塞界面刷新)。
步骤 4:初始化主窗口并启动程序
# 1. 创建主窗口(作为所有子窗口的父容器)
root = tk.Tk()
# 2. 隐藏主窗口(主窗口仅用于调度,不需要显示)
root.withdraw()
# 3. 开始批量创建窗口:300个窗口,间隔0.01秒
create_multiple_windows(300, 0.01)
# 4. 启动Tkinter事件循环(保持程序运行,等待用户交互或定时事件)
root.mainloop()
root = tk.Tk():创建 Tkinter 的主窗口实例(每个 Tkinter 程序必须有一个主窗口)。root.withdraw():隐藏主窗口,避免干扰子窗口的显示。root.mainloop():启动事件循环,监听窗口事件(如定时关闭、用户操作等),确保程序持续运行。
二、整体流程总结
- 导入库并声明编码,确保中文正常显示。
- 定义
create_window函数,负责生成单个随机窗口(位置、内容、样式随机),并设置 10 秒后自动关闭。 - 定义
create_multiple_windows函数,通过递归 + 非阻塞延迟的方式,批量创建 300 个窗口。 - 初始化主窗口(隐藏),启动批量创建函数,最后进入事件循环保持程序运行。
通过这种设计,既实现了 “多窗口随机展示” 的效果,又避免了多线程操作 Tkinter 的兼容性问题,确保程序稳定运行。
三、程序核心特性与视觉效果
- 动态多样性:窗口的位置、提示语、背景色三个关键元素均独立随机生成,打破单一视觉模式,提升展示趣味性。
- 高效资源管理:窗口创建间隔仅 0.01 秒,300 个窗口总创建耗时约 3 秒,且所有窗口会在 10 秒后自动销毁,避免长期占用系统内存。
- 友好用户体验:窗口置顶设计确保提示信息能够被用户及时看到,温馨提示语风格贴近日常,适合作为桌面轻度提醒工具。
四、潜在优化方向与改进建议
- 性能适配优化:300 个窗口同时存在可能给低配置设备带来压力,可优化为分批创建模式(如每次创建 50 个,间隔 0.5 秒再创建下一批),降低瞬时资源占用。
- 鲁棒性提升:当前代码未包含异常处理机制,可添加 try-except 块捕获窗口创建失败等异常,避免程序意外终止。
- 功能扩展性增强:将提示语和背景色列表迁移至外部文本文件或 Excel 表格,用户无需修改代码即可动态更新内容;同时将窗口数量、创建间隔、关闭时间等参数设置为可配置项,提升程序灵活性。
- 交互体验升级:可添加窗口拖拽功能、透明度调节选项,或设置提示语滚动效果,进一步提升用户使用体验。
五、总结
该程序基于 Tkinter 库实现了轻量级、高灵活性的随机温馨提示窗口生成功能,核心优势在于非阻塞的递归调度机制与全方位的随机化设计。程序结构清晰、逻辑简洁,既适用于日常娱乐场景,也可作为简易桌面提醒工具使用。通过上述优化方向的调整,还可进一步提升程序的兼容性、扩展性与用户体验,适配更多使用场景。
1569

被折叠的 条评论
为什么被折叠?



