在日常使用电脑的过程中,偶尔来点小惊喜总是能让人心情愉悦。今天,我要和大家分享一段有趣的 Python 代码,它借助 Tkinter 库创建一系列随机位置弹出的温馨提示窗口,给人带来意想不到的惊喜效果。下面就让我们一起来深入了解这段代码吧!
结果展示(文末附完整代码):
Python 和 Tkinter 打造惊喜弹窗小应用
目录
结果展示:
一、代码概述
1. 导入必要的库
二、主要函数介绍
1. surprise函数
2. close_all_windows函数
3. create_next_window函数
三、程序运行流程
注意:
四、总结
完整代码:
一、代码概述
这段代码主要实现了一个简单却充满趣味的功能:在屏幕上随机位置弹出多个带有特定温馨提示文字的小窗口,一段时间后再自动关闭所有弹出的窗口。整个程序基于 Python 的 Tkinter 库进行图形用户界面(GUI)的创建和操作。
1. 导入必要的库
代码开头部分导入了三个必要的 Python 库:
import time
import tkinter as tk
import random
time
:用于处理时间相关的操作,在本代码中主要用于在关闭所有窗口时添加一个短暂的延迟,确保窗口能够正常关闭。tkinter
(别名为tk
):这是 Python 内置的标准 GUI 库,用于创建各种窗口、控件以及处理用户交互等操作。我们将依靠它来构建弹出窗口并设置其属性。random
:用于生成随机数,在本代码中用于确定每个弹出窗口在屏幕上的随机位置。
二、主要函数介绍
1. surprise
函数
def surprise(root):
width = root.winfo_screenwidth()
height = root.winfo_screenheight()
a = random.randrange(0, width)
b = random.randrange(0, height)
window = tk.Toplevel(root)
window.title('嘻嘻')
window.geometry("240x50+" + str(a) + "+" + str(b))
window.attributes("-topmost", True) # 设置窗口为最上层
tk.Label(window,
# 更改文本内容
text='LJH,天天开心啊!',
# 更改文本颜色--字体--大小
bg='pink',
font=("楷体", 17),
width=19,
height=2,
).pack()
- 这个函数的主要目的是创建一个具有特定样式和位置的弹出窗口。
- 首先,它通过
root.winfo_screenwidth()
和root.winfo_screenheight()
获取屏幕的宽度和高度信息,以便确定窗口可以出现的范围。 - 然后,使用
random.randrange
函数在屏幕宽度和高度范围内分别生成随机的横坐标a
和纵坐标b
,用于确定窗口在屏幕上的随机位置。 - 接着,创建一个新的
tk.Toplevel
窗口对象window
,并设置其标题为'嘻嘻'
,通过geometry
方法设置窗口的大小为240x50
像素,并根据生成的随机坐标a
和b
确定窗口的具体位置。 - 最后,通过
window.attributes("-topmost", True)
将窗口设置为最上层显示,确保它能在其他窗口之上弹出。在窗口内部,创建了一个tk.Label
控件,设置了文本内容为'LJH,天天开心啊!'
,文本颜色背景为pink
,字体为("楷体", 17)
,并调整了宽度和高度等属性,然后使用pack
方法将标签控件添加到窗口中。
2. close_all_windows
函数
def close_all_windows(root):
# 这是一个简化的关闭函数,它关闭所有顶层窗口。
for child in root.winfo_children():
child.destroy()
# 如果所有窗口都已关闭,则结束程序
if not root.winfo_children():
time.sleep(0.05)
root.destroy()
- 此函数用于关闭所有由主窗口
root
创建的顶层子窗口。 - 它通过遍历
root.winfo_children()
获取主窗口的所有子窗口对象,然后对每个子窗口调用destroy
方法来关闭它们。 - 在关闭所有子窗口后,再次检查主窗口是否还有子窗口(通过
not root.winfo_children()
判断),如果没有了,说明所有相关窗口都已关闭,此时先暂停0.05
秒(使用time.sleep
),然后调用root.destroy()
来结束整个程序,释放相关资源。
3. create_next_window
函数
windows_left = 400 # 初始化打开窗口数量
def create_next_window(root):
global windows_left
if windows_left > 0:
surprise(root) # 创建一个新的窗口
windows_left -= 1
root.after(50, lambda: create_next_window(root)) # 递归调用以创建下一个窗口
else:
# 所有窗口都已创建,现在调用关闭函数--等待时间15秒
root.after(15000, lambda: close_all_windows(root)) # 稍后关闭所有窗口
- 这个函数是整个程序的核心控制函数,用于创建一系列的弹出窗口并安排它们的关闭时间。
- 首先,它通过一个全局变量
windows_left
来记录还需要创建的窗口数量,初始值为400
。 - 在函数内部,每次调用时先检查
windows_left
是否大于0
,如果是,则调用surprise
函数创建一个新的弹出窗口,然后将windows_left
的值减1
,表示已经创建了一个窗口。 - 接着,使用
root.after(50, lambda: create_next_window(root))
进行递归调用,这意味着在50
毫秒后会再次调用create_next_window
函数自身,从而实现每隔50
毫秒创建一个新的弹出窗口,直到windows_left
的值变为0
。 - 当
windows_left
变为0
时,即所有需要创建的窗口都已创建完成,此时通过root.after(15000, lambda: close_all_windows(root))
安排在15000
毫秒(即15
秒)后调用close_all_windows
函数来关闭所有创建的弹出窗口。
三、程序运行流程
- 创建主窗口并隐藏:
root = tk.Tk()
root.withdraw() # 隐藏主窗口
- 首先创建一个
tk.Tk
类型的主窗口对象root
,然后立即调用root.withdraw()
方法将主窗口隐藏起来,因为我们主要关注的是弹出的子窗口,不需要主窗口显示在屏幕上。
- 开始创建弹出窗口:
create_next_window(root)
- 调用
create_next_window
函数开始创建一系列的弹出窗口,它会按照设定的逻辑每隔50
毫秒创建一个新窗口,直到创建了400
个窗口为止。
- 关闭弹出窗口:
- 在创建完所有
400
个窗口后,经过15
秒的延迟(由root.after(15000, lambda: close_all_windows(root))
安排),会调用close_all_windows
函数来关闭所有已经创建的弹出窗口,完成整个程序的运行过程。
注意:
- 确保环境配置正确:
- 由于代码使用了 Python 的内置 Tkinter 库,所以无需额外安装库,只要你安装了 Python 本身即可(一般 Python 版本在 3.x 及以上都支持 Tkinter)。
- 运行代码:
- 将上述代码保存为一个
.py
文件,比如surprise_windows.py
。 - 在命令行中切换到保存代码文件的目录,然后执行以下命令运行代码:
python surprise_windows.py
。 - 之后你就会看到屏幕上陆续弹出一系列带有温馨提示文字的粉色小窗口,它们会在随机位置出现,15 秒后所有这些弹出窗口会自动关闭。
- 将上述代码保存为一个
四、总结
完整代码:
# -*- coding:utf-8 -*-
import time
import tkinter as tk
import random
def surprise(root):
width = root.winfo_screenwidth()
height = root.winfo_screenheight()
a = random.randrange(0, width)
b = random.randrange(0, height)
window = tk.Toplevel(root)
window.title('嘻嘻')
window.geometry("240x50+" + str(a) + "+" + str(b))
window.attributes("-topmost", True) # 设置窗口为最上层
tk.Label(window,
# 更改文本内容
text='LJH,天天开心啊!',
# 更改文本颜色--字体--大小
bg='pink',
font=("楷体", 17),
width=19,
height=2,
).pack()
def close_all_windows(root):
# 这是一个简化的关闭函数,它关闭所有顶层窗口。
for child in root.winfo_children():
child.destroy()
# 如果所有窗口都已关闭,则结束程序
if not root.winfo_children():
time.sleep(0.05)
root.destroy()
windows_left = 400 # 初始化打开窗口数量
def create_next_window(root):
global windows_left
if windows_left > 0:
surprise(root) # 创建一个新的窗口
windows_left -= 1
root.after(50, lambda: create_next_window(root)) # 递归调用以创建下一个窗口
else:
# 所有窗口都已创建,现在调用关闭函数--等待时间15秒
root.after(15000, lambda: close_all_windows(root)) # 稍后关闭所有窗口
root = tk.Tk()
root.withdraw() # 隐藏主窗口
create_next_window(root) # 开始创建窗口
root.mainloop()
通过以上详细的介绍,我们了解了这段 Python 代码是如何利用 Tkinter 库实现创建随机位置弹出窗口并自动关闭的功能的。它展示了如何通过简单的代码逻辑和 Tkinter 的基本功能来打造一个有趣的小应用,希望你能从中获得启发,尝试自己去修改和拓展这个程序,比如改变弹出窗口的样式、文字内容或者调整弹出和关闭的时间间隔等,创造出更多有趣的效果。如果你在运行过程中遇到任何问题,欢迎随时在评论区留言提问哦!