Python?Tkinter實現(xiàn)滿屏隨機彈出溫馨提示對話框完整代碼
前言
今天我要分享一個有趣的 Python 項目——使用 Tkinter 創(chuàng)建滿屏隨機彈出的溫馨提示對話框。這個項目結(jié)合了 GUI 編程、多線程和動畫效果,最終實現(xiàn)了一個視覺上很吸引人的效果。
項目效果
運行程序后,你會看到無數(shù)個小小的對話框隨機從屏幕各處跳出來,每個對話框都顯示著不同的溫馨話語,比如"多喝水哦~??"、"保持微笑呀??"等。這些對話框以柔和的顏色顯示,在屏幕上停留2-4秒后自動消失,點擊任意對話框可以立即關(guān)閉。

完整代碼
import tkinter as tk
import random
import time
import threading
class TipWindowManager:
"""溫馨提示窗口管理器"""
def __init__(self):
self.root = tk.Tk()
self.root.withdraw()
self.active_windows = []
self.windows_created = 0
# 配置參數(shù)
self.window_count = 150 # 窗口數(shù)量
self.batch_size = 1 # 每次只創(chuàng)建一個,實現(xiàn)隨機跳出效果
self.create_interval = 0.05 # 創(chuàng)建間隔
# 獲取屏幕尺寸
self.screen_width = self.root.winfo_screenwidth()
self.screen_height = self.root.winfo_screenheight()
print(f"??? 屏幕尺寸: {self.screen_width} x {self.screen_height}")
# 豐富的提示內(nèi)容庫
self.tips = [
'多喝水哦~??', '保持微笑呀??', '每天都要元氣滿滿?',
'記得吃水果??', '保持好心情??', '好好愛自己??',
'期待下一次見面??', '順順利利??', '早點休息??',
'愿所有煩惱都消失??', '別熬夜?', '今天過得開心嘛??',
'天冷了,多穿衣服??', '保護眼睛哦??',
'深呼吸放松一下???', '你真棒!??', '一切都會好的??',
'保持積極心態(tài)?', '加油!??',
'相信自己??', '今天也是美好的一天??', '保持耐心?',
'慢慢來比較快??', '你很特別??', '世界因你而美麗??',
'放松一下??', '享受當(dāng)下??', '感恩生活??',
'保持好奇心??', '勇敢做自己??', '進步一點點??',
'溫暖如春??', '心平氣和??', '夢想成真??',
'快樂很簡單??', '陽光總在風(fēng)雨后???', '堅持就是勝利??',
'你是最棒的?', '生活很美好??', '向前看??',
'溫柔待人??', '珍惜當(dāng)下??', '幸福在身邊??'
]
# 柔和的背景顏色庫
self.bg_colors = [
'#FFF0F5', '#F0FFFF', '#F5FFFA', '#FFF8DC', '#F0F8FF',
'#F8F8FF', '#F5F5F5', '#FAFAD2', '#E6E6FA', '#FFE4E1',
'#FFFAF0', '#FDF5E6', '#FAF0E6', '#FFF5EE', '#F0FFF0',
'#F5F5DC', '#FFEFD5', '#FFE4B5', '#FAF0E6', '#F8F8FF',
'#F0F8FF', '#E0FFFF', '#E6E6FA', '#FFF0F5', '#FFE4E1',
'#FFFAFA', '#F5F5F5', '#F0F0F0', '#FFF8DC', '#FFE4C4',
'#FFDAB9', '#FFEFD5', '#FFFACD', '#F0E68C', '#E6E6FA',
'#D8BFD8', '#DDA0DD', '#EE82EE', '#DA70D6', '#FFB6C1'
]
def create_random_window(self):
"""隨機創(chuàng)建一個對話框"""
if self.windows_created >= self.window_count:
return
try:
window = tk.Toplevel()
self.active_windows.append(window)
self.windows_created += 1
# 隨機窗口尺寸
window_width = random.randint(220, 300)
window_height = random.randint(90, 130)
# 完全隨機位置 - 確保在屏幕內(nèi)
x = random.randint(10, max(20, self.screen_width - window_width - 10))
y = random.randint(10, max(20, self.screen_height - window_height - 10))
# 對話框設(shè)置
window.title('溫馨提示')
window.geometry(f"{window_width}x{window_height}+{x}+{y}")
window.resizable(False, False)
# 隨機選擇內(nèi)容和顏色
tip_text = random.choice(self.tips)
bg_color = random.choice(self.bg_colors)
# 創(chuàng)建內(nèi)容
label = tk.Label(
window,
text=tip_text,
bg=bg_color,
fg='#2F4F4F',
font=('微軟雅黑', random.randint(11, 13)),
padx=18,
pady=22,
wraplength=window_width - 36,
justify='center',
relief='flat',
bd=1
)
label.pack(expand=True, fill='both')
# 窗口置頂
window.attributes('-topmost', True)
window.attributes('-alpha', 0.95)
# 關(guān)閉時間:2-4秒
close_time = random.randint(2000, 4000)
def close_window():
try:
if window.winfo_exists():
# 快速淡出
for alpha in range(95, 0, -10):
if window.winfo_exists():
window.attributes('-alpha', alpha/100)
window.update()
time.sleep(0.01)
window.destroy()
if window in self.active_windows:
self.active_windows.remove(window)
except:
pass
window.after(close_time, close_window)
# 點擊立即關(guān)閉
def on_click(event):
try:
if window.winfo_exists():
window.destroy()
if window in self.active_windows:
self.active_windows.remove(window)
except:
pass
window.bind('<Button-1>', on_click)
label.bind('<Button-1>', on_click)
# 顯示創(chuàng)建進度
if self.windows_created % 10 == 0:
print(f"?? 已創(chuàng)建 {self.windows_created}/{self.window_count} 個對話框")
except Exception as e:
print(f"創(chuàng)建窗口時出錯: {e}")
def check_completion(self):
"""檢查是否所有窗口都已關(guān)閉"""
if len(self.active_windows) == 0 and self.windows_created >= self.window_count:
print("?? 所有溫馨提示已顯示完畢!")
self.root.quit()
else:
self.root.after(500, self.check_completion)
def start_random_creation(self):
"""開始隨機創(chuàng)建窗口"""
def create_loop():
print("?? 開始隨機彈出對話框...")
start_time = time.time()
# 持續(xù)創(chuàng)建直到達到目標(biāo)數(shù)量
while self.windows_created < self.window_count:
# 在主線程中創(chuàng)建窗口
self.root.after(0, self.create_random_window)
# 隨機間隔,創(chuàng)造更自然的彈出效果
time.sleep(random.uniform(0.03, 0.08))
end_time = time.time()
print(f"?? 所有 {self.window_count} 個對話框創(chuàng)建完成!耗時: {end_time-start_time:.2f}秒")
print("??? 屏幕已被隨機彈出的對話框鋪滿!")
# 開始檢查完成狀態(tài)
self.root.after(2000, self.check_completion)
return create_loop
def main(self):
"""主程序"""
# 顯示開始信息
print("=" * 60)
print("?? 隨機彈出溫馨提示開始!")
print(f"?? 目標(biāo): {self.window_count} 個對話框")
print("?? 每個對話框顯示2-4秒")
print("?? 點擊任意對話框立即關(guān)閉")
print("=" * 60)
# 在新線程中控制隨機創(chuàng)建
thread = threading.Thread(target=self.start_random_creation(), daemon=True)
thread.start()
try:
self.root.mainloop()
except KeyboardInterrupt:
print("\n?? 程序被用戶中斷")
finally:
print("?? 清理剩余對話框...")
for window in self.active_windows[:]:
try:
window.destroy()
except:
pass
self.root.quit()
def main():
"""主函數(shù)"""
manager = TipWindowManager()
manager.main()
if __name__ == "__main__":
main()總結(jié)
這個項目展示了如何使用 Python 的 Tkinter 庫創(chuàng)建有趣的 GUI 效果。通過結(jié)合多線程、隨機化和動畫效果,我們實現(xiàn)了一個既美觀又實用的應(yīng)用程序。代碼結(jié)構(gòu)清晰,易于理解和修改,適合初學(xué)者學(xué)習(xí) GUI 編程。
不想運行的也可以下載exe文件。
到此這篇關(guān)于Python Tkinter實現(xiàn)滿屏隨機彈出溫馨提示對話框的文章就介紹到這了,更多相關(guān)Python Tkinter滿屏隨機彈出溫馨提示對話框內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python爬蟲分析微博熱搜關(guān)鍵詞的實現(xiàn)代碼
這篇文章主要介紹了Python爬蟲分析微博熱搜關(guān)鍵詞的實現(xiàn)代碼,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-02-02
Python+matplotlib+numpy實現(xiàn)在不同平面的二維條形圖
這篇文章主要介紹了Python+matplotlib+numpy實現(xiàn)在不同平面的二維條形圖,具有一定借鑒價值,需要的朋友可以參考下2018-01-01
解決pycharm中opencv-python導(dǎo)入cv2后無法自動補全的問題(不用作任何文件上的修改)
這篇文章主要介紹了解決pycharm中opencv-python導(dǎo)入cv2后無法自動補全的問題(不用作任何文件上的修改),本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03

