import tkinter as tk import random import threading import time
定义多种背景颜色
bg_colors = ['pink', 'lightblue', 'lightgreen', 'lightyellow', 'lightpink', 'cyan', 'lavender']
定义不同的消息内容
messages = [ '岁岁无忧!', '生辰喜乐!', '顺遂长安!', '岁岁平安!', '永远被爱包围!', '永远的幸福!', '愿你平安健康!', '愿你事事顺心!', '愿你永远保持心里的光!' ]
def dow(msg): window = tk.Tk() width = window.winfo_screenwidth() height = window.winfo_screenheight() a = random.randrange(0, width) b = random.randrange(0, height) color = random.choice(bg_colors)
window.title('亲爱的:')
# 调整窗口大小以适应不同长度的消息
window.geometry("250x80" + "+" + str(a) + "+" + str(b))
tk.Label(window,
text=msg,
bg=color,
font=('楷体', 18),
wraplength=220, # 自动换行
width=25,
height=3
).pack()
window.mainloop()
代码分析:
threads = []
从消息列表中随机选择50条(允许重复,如果想完全不重复需要消息列表至少有50条)
如果希望完全不重复,可以使用:selected_messages = random.sample(messages * 4, 50) 确保有足够数量
selected_messages = [random.choice(messages) for _ in range(500)]
for i in range(500): t = threading.Thread(target=dow, args=(selected_messages[i],)) threads.append(t) time.sleep(0.05) # 稍微增加间隔,避免系统卡顿 threads[i].start()
这段代码的主要功能是批量创建 500 个随机位置、随机背景色、显示随机祝福消息的 Tkinter 窗口,整体逻辑清晰,以下是详细分析:
1. 导入的库
tkinter as tk:用于 Python 的标准 GUI 库,用于创建窗口、标签等界面元素。random:用于生成随机数(随机位置、随机颜色、随机消息)。threading:用于创建多线程,实现同时同时弹出多个窗口(避免单线程阻塞)。time:用于控制线程启动的间隔时间,避免系统瞬间负载过高。
2. 核心数据定义
bg_colors列表:存储 7 种浅色调背景色(如粉色、浅蓝色等),用于随机设置窗口背景。messages列表:存储 9 条祝福类消息(如 “岁岁无忧”“生辰喜乐” 等),用于随机显示在窗口中。
3. 核心函数 dow(msg)
该函数负责创建单个窗口,功能拆解如下:
-
window = tk.Tk():创建一个 Tkinter 窗口实例。 -
获取屏幕尺寸:
width = window.winfo_screenwidth()(屏幕宽度)、height = window.winfo_screenheight()(屏幕高度),用于计算窗口随机位置。 -
随机位置:
a = random.randrange(0, width)(随机 x 坐标)、b = random.randrange(0, height)(随机 y 坐标),确保窗口在屏幕范围内随机分布。 -
随机颜色:
color = random.choice(bg_colors)从颜色列表中随机选一种背景色。 -
窗口设置:
window.title('亲爱的:'):设置窗口标题。window.geometry("250x80" + "+" + str(a) + "+" + str(b)):设置窗口大小(250x80 像素)和位置(坐标 (a,b))。
-
标签控件:
tk.Label(...)创建文字标签,显示传入的消息msg。bg=color:使用随机背景色。font=('楷体', 18):设置字体为楷体,大小 18。wraplength=220:当文字过长时,在 220 像素处自动换行。width=25, height=3:标签的宽高(字符单位)。
-
window.mainloop():启动窗口的事件循环(保持窗口显示,等待用户操作)。
4. 多线程创建窗口
-
selected_messages = [random.choice(messages) for _ in range(500)]:生成 500 条消息的列表,每条消息从messages中随机选择(允许重复,因为原消息只有 9 条,500 条必然重复)。 -
循环创建 500 个线程:
t = threading.Thread(target=dow, args=(selected_messages[i],)):创建线程,指定目标函数为dow,并传入第 i 条消息作为参数。threads.append(t):将线程加入列表管理。time.sleep(0.05):每次创建线程后暂停 0.05 秒,避免短时间启动 500 个线程导致系统卡顿。threads[i].start():启动线程(执行dow函数,创建窗口)。
5. 代码特点与注意事项
- 多窗口并发:通过多线程实现同时弹出多个窗口,避免单线程下 “一个窗口关闭后才显示下一个” 的问题。
- 随机性:窗口位置、背景色、消息内容均为随机,视觉上更丰富。
- 消息重复:由于
messages只有 9 条,而需要生成 500 条消息,因此会有大量重复(若需减少重复,可扩展messages列表长度)。 - 系统负载:500 个窗口会占用较多系统资源(内存、CPU),可能导致电脑暂时卡顿,尤其配置较低的设备需谨慎运行。
- 关闭窗口:需手动关闭所有窗口(可通过任务管理器强制结束 Python 进程快速关闭)。
总结
这段代码通过 Tkinter 创建 GUI 窗口,结合多线程和随机函数,实现了批量弹出 500 个带有随机祝福消息的窗口,适合用于生日、节日等场景的趣味互动,但需注意系统性能限制。