基于Tkinter的随机温馨提醒窗口系统

        上图是一个基于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():启动事件循环,监听窗口事件(如定时关闭、用户操作等),确保程序持续运行。

二、整体流程总结

  1. 导入库并声明编码,确保中文正常显示。
  2. 定义create_window函数,负责生成单个随机窗口(位置、内容、样式随机),并设置 10 秒后自动关闭。
  3. 定义create_multiple_windows函数,通过递归 + 非阻塞延迟的方式,批量创建 300 个窗口。
  4. 初始化主窗口(隐藏),启动批量创建函数,最后进入事件循环保持程序运行。

通过这种设计,既实现了 “多窗口随机展示” 的效果,又避免了多线程操作 Tkinter 的兼容性问题,确保程序稳定运行。

三、程序核心特性与视觉效果

  1. 动态多样性:窗口的位置、提示语、背景色三个关键元素均独立随机生成,打破单一视觉模式,提升展示趣味性。
  2. 高效资源管理:窗口创建间隔仅 0.01 秒,300 个窗口总创建耗时约 3 秒,且所有窗口会在 10 秒后自动销毁,避免长期占用系统内存。
  3. 友好用户体验:窗口置顶设计确保提示信息能够被用户及时看到,温馨提示语风格贴近日常,适合作为桌面轻度提醒工具。

四、潜在优化方向与改进建议

  1. 性能适配优化:300 个窗口同时存在可能给低配置设备带来压力,可优化为分批创建模式(如每次创建 50 个,间隔 0.5 秒再创建下一批),降低瞬时资源占用。
  2. 鲁棒性提升:当前代码未包含异常处理机制,可添加 try-except 块捕获窗口创建失败等异常,避免程序意外终止。
  3. 功能扩展性增强:将提示语和背景色列表迁移至外部文本文件或 Excel 表格,用户无需修改代码即可动态更新内容;同时将窗口数量、创建间隔、关闭时间等参数设置为可配置项,提升程序灵活性。
  4. 交互体验升级:可添加窗口拖拽功能、透明度调节选项,或设置提示语滚动效果,进一步提升用户使用体验。

五、总结

        该程序基于 Tkinter 库实现了轻量级、高灵活性的随机温馨提示窗口生成功能,核心优势在于非阻塞的递归调度机制与全方位的随机化设计。程序结构清晰、逻辑简洁,既适用于日常娱乐场景,也可作为简易桌面提醒工具使用。通过上述优化方向的调整,还可进一步提升程序的兼容性、扩展性与用户体验,适配更多使用场景。

import tkinter as tk import random import threading import time def show_warm_tip(): # 创建窗口 window = tk.Tk() # 获取屏幕宽高 screen_width = window.winfo_screenwidth() screen_height = window.winfo_screenheight() # 随机窗口位置(确保窗口完全显示在屏幕内) window_width = 250 window_height = 60 x = random.randrange(0, screen_width - window_width) y = random.randrange(0, screen_height - window_height) # 设置窗口标题和大小位置 window.title('温馨提示') window.geometry(f"{window_width}x{window_height}+{x}+{y}") # 提示文字列表(已添加新内容) tips = [ '多喝水哦~', '保持微笑呀', '每天都要元气满满', '记得吃水果', '保持好心情', '好好爱自己', '我想你了', '梦想成真', '期待下一次见面', '金榜题名', '顺顺利利', '早点休息', '愿所有烦恼都消失', '别熬夜', '今天过得开心嘛', '天冷了,多穿衣服' ] tip = random.choice(tips) # 多样的背景颜色 bg_colors = [ 'lightpink', 'skyblue', 'lightgreen', 'lavender', 'lightyellow', 'plum', 'coral', 'bisque', 'aquamarine', 'mistyrose', 'honeydew', 'lavenderblush', 'oldlace' ] bg = random.choice(bg_colors) # 创建标签并显示文字 tk.Label( window, text=tip, bg=bg, font=('微软雅黑', 16), width=30, height=3 ).pack() # 窗口置顶显示 window.attributes('-topmost', True) window.mainloop() # 创建线程列表 threads = [] # 窗口数量(根据屏幕大小可调整) for i in range(300): t = threading.Thread(target=show_warm_tip) threads.append(t) time.sleep(0.005) # 快速弹出窗口 threads[i].start() 试试在Python上能不能运行
最新发布
10-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值