Hướng dẫn tạo Trend Popup
Hướng dẫn chi tiết cách tạo ứng dụng popup tự động với Python và Tkinter, tạo hiệu ứng popup liên tục với màu sắc và nội dung ngẫu nhiên.
Yêu cầu
- Python 3.x
- Thư viện
tkinter(thường đi kèm với Python)
Cấu trúc chương trình
Chương trình gồm các phần chính:
- Danh sách thông điệp: Lưu trữ các câu "I love you" bằng nhiều ngôn ngữ
- Danh sách màu pastel: Màu nền ngẫu nhiên cho popup
- Class StickyPopup: Quản lý việc tạo và đóng popup
Code hoàn chỉnh
import tkinter as tk
import random
import threading
import time
# Danh sách "I love you" bằng nhiều ngôn ngữ
LOVE_MESSAGES = [
"I love you", # English
"Aku cinta kamu", # Indonesian/Malay
"Saya cinta kamu", # Indonesian (formal)
"Jag älskar dig", # Swedish
"Ich liebe dich", # German
"Je t'aime", # French
"Anh yêu em", # Vietnamese
"愛してる", # Japanese
"मैं तुमसे प्यार करता हू", # Hindi
"Taim i' ngra leat", # Irish Gaelic
"Σ' αγαπώ", # Greek
"Te amo", # Spanish
"Я люблю тебя", # Russian
"爱你", # Chinese
"Jeg elsker deg", # Danish/Norwegian
"Eu te amo", # Portuguese
"Ti amo", # Italian
"Ik hou van jou", # Dutch
"Seni seviyorum", # Turkish
"أحبك", # Arabic
"사랑해", # Korean
"Mahal kita", # Filipino/Tagalog
"Volim te", # Croatian/Serbian
"Miluji tě", # Czech
"Szeretlek", # Hungarian
"Te iubesc", # Romanian
"Kocham cię", # Polish
"Ég elska þig", # Icelandic
"Minä rakastan sinua", # Finnish
"Te quiero", # Spanish (alternative)
]
# Màu pastel ngẫu nhiên
PASTEL_COLORS = [
"#FFB6C1", # Light pink
"#FFA07A", # Light salmon
"#FFD700", # Gold
"#98FB98", # Pale green
"#87CEEB", # Sky blue
"#DDA0DD", # Plum
"#F0E68C", # Khaki
"#FFE4E1", # Misty rose
"#E0E0E0", # Light gray
"#B0E0E6", # Powder blue
"#FFEFD5", # Papaya whip
"#F5DEB3", # Wheat
"#D8BFD8", # Thistle
"#FFE4B5", # Moccasin
"#E6E6FA", # Lavender
"#FFF8DC", # Cornsilk
"#F0F8FF", # Alice blue
"#FFE4E1", # Misty rose
"#FFF0F5", # Lavender blush
"#F5FFFA", # Mint cream
]
class StickyPopup:
def __init__(self):
self.root = tk.Tk()
self.root.withdraw() # Ẩn cửa sổ chính
self.running = True
self.popups = [] # Danh sách các popup đang mở
def create_popup(self):
"""Tạo một popup mới với màu và text ngẫu nhiên"""
if not self.running:
return
# Tạo cửa sổ popup
popup = tk.Toplevel()
popup.title("tk")
# Thêm popup vào danh sách
self.popups.append(popup)
# Chọn màu và text ngẫu nhiên
bg_color = random.choice(PASTEL_COLORS)
message = random.choice(LOVE_MESSAGES)
# Thiết lập kích thước cố định và vị trí ngẫu nhiên
width = 250
height = 100
x = random.randint(0, self.root.winfo_screenwidth() - width)
y = random.randint(0, self.root.winfo_screenheight() - height)
popup.geometry(f"{width}x{height}+{x}+{y}")
popup.configure(bg=bg_color)
# Thêm label với text
label = tk.Label(
popup,
text=message,
bg=bg_color,
font=("Arial", 12, "bold"),
wraplength=width - 20,
justify="center"
)
label.pack(expand=True, fill="both", padx=10, pady=10)
# Đóng popup khi click vào nút X và xóa khỏi danh sách
def on_close():
if popup in self.popups:
self.popups.remove(popup)
popup.destroy()
popup.protocol("WM_DELETE_WINDOW", on_close)
def auto_close(self):
"""Tự động đóng tất cả popup và ứng dụng sau 10 giây"""
self.running = False # Dừng tạo popup mới
# Đóng tất cả popup đang mở
for popup in self.popups[:]: # Copy list để tránh lỗi khi modify trong loop
try:
popup.destroy()
except:
pass
self.popups.clear()
# Đóng cửa sổ chính và thoát
self.root.quit()
self.root.destroy()
def start_creating_popups(self):
"""Bắt đầu tạo popup liên tục"""
def create_loop():
while self.running:
try:
self.create_popup()
time.sleep(0.05) # Tạo popup mới mỗi 0.05 giây (20 popup/giây)
except:
break
# Chạy trong thread riêng để không block UI
thread = threading.Thread(target=create_loop, daemon=True)
thread.start()
def run(self):
"""Chạy ứng dụng"""
self.start_creating_popups()
# Tự động tắt sau 10 giây (10000 milliseconds)
self.root.after(10000, self.auto_close)
try:
self.root.mainloop()
except KeyboardInterrupt:
self.running = False
if __name__ == "__main__":
app = StickyPopup()
app.run()
Giải thích từng phần
1. Import thư viện
import tkinter as tk
import random
import threading
import time
tkinter: Tạo giao diện cửa sổ popuprandom: Chọn ngẫu nhiên màu và thông điệpthreading: Tạo popup trong thread riêng để không block UItime: Điều khiển tốc độ tạo popup
2. Khởi tạo class
def __init__(self):
self.root = tk.Tk()
self.root.withdraw() # Ẩn cửa sổ chính
self.running = True
self.popups = [] # Danh sách các popup đang mở
self.root.withdraw(): Ẩn cửa sổ chính, chỉ hiển thị popupself.running: Flag để kiểm soát việc tạo popupself.popups: Lưu trữ danh sách popup để quản lý
3. Tạo popup
def create_popup(self):
popup = tk.Toplevel()
bg_color = random.choice(PASTEL_COLORS)
message = random.choice(LOVE_MESSAGES)
width = 250
height = 100
x = random.randint(0, self.root.winfo_screenwidth() - width)
y = random.randint(0, self.root.winfo_screenheight() - height)
popup.geometry(f"{width}x{height}+{x}+{y}")
popup.configure(bg=bg_color)
tk.Toplevel(): Tạo cửa sổ popup mới- Vị trí ngẫu nhiên trên màn hình
- Màu nền và thông điệp được chọn ngẫu nhiên
4. Tạo popup liên tục
def start_creating_popups(self):
def create_loop():
while self.running:
self.create_popup()
time.sleep(0.05) # 20 popup/giây
thread = threading.Thread(target=create_loop, daemon=True)
thread.start()
- Sử dụng thread riêng để không block UI
time.sleep(0.05): Tạo popup mới mỗi 0.05 giây (20 popup/giây)daemon=True: Thread tự động dừng khi chương trình kết thúc
5. Tự động đóng
def auto_close(self):
self.running = False
for popup in self.popups[:]:
popup.destroy()
self.root.quit()
- Dừng tạo popup mới
- Đóng tất cả popup đang mở
- Thoát ứng dụng
Cách chạy
- Lưu code vào file
sticky_popup.py - Chạy lệnh:
python sticky_popup.py
Tùy chỉnh
Thay đổi tốc độ tạo popup
time.sleep(0.05) # Thay đổi giá trị này
# 0.1 = 10 popup/giây
# 0.05 = 20 popup/giây
# 0.02 = 50 popup/giây
Thay đổi thời gian tự động đóng
self.root.after(10000, self.auto_close) # 10000 = 10 giây
# 5000 = 5 giây
# 30000 = 30 giây
Thay đổi kích thước popup
width = 250 # Chiều rộng
height = 100 # Chiều cao
Thêm thông điệp mới
Thêm vào danh sách LOVE_MESSAGES:
LOVE_MESSAGES = [
# ... các thông điệp hiện có
"Thông điệp mới của bạn",
]
Thêm màu mới
Thêm vào danh sách PASTEL_COLORS:
PASTEL_COLORS = [
# ... các màu hiện có
"#HEXCODE", # Tên màu
]
Lưu ý
- Popup sẽ tự động đóng sau 10 giây
- Có thể đóng từng popup bằng nút X
- Sử dụng
Ctrl+Cđể dừng chương trình sớm - Tốc độ tạo popup cao có thể ảnh hưởng hiệu năng hệ thống