111 lines
3.4 KiB
Python
111 lines
3.4 KiB
Python
|
import tkinter as tk #gui模块 主要共功能是创建窗口
|
|||
|
from tkinter import messagebox
|
|||
|
from PIL import Image, ImageTk
|
|||
|
import os
|
|||
|
import random
|
|||
|
import pygame
|
|||
|
|
|||
|
# 初始化 pygame 播放器
|
|||
|
pygame.mixer.init()
|
|||
|
|
|||
|
# 宠物信息(名字 + 描述 + 图像路径 + 声音路径)
|
|||
|
pets = {
|
|||
|
"fire": {
|
|||
|
"name": "小火星",
|
|||
|
"desc": "热情似火的小精灵,像火焰一样跳跃,能照亮黑暗的角落!",
|
|||
|
"image": "./images/fire_pet.png",
|
|||
|
"sound": "./sounds/fire.mp3"
|
|||
|
},
|
|||
|
"water": {
|
|||
|
"name": "小水灵",
|
|||
|
"desc": "爱在水中嬉戏的小可爱,总能带来清凉和欢乐的气息!",
|
|||
|
"image": "./images/water_pet.png",
|
|||
|
"sound": "./sounds/water.mp3"
|
|||
|
},
|
|||
|
"thunder": {
|
|||
|
"name": "小电闪",
|
|||
|
"desc": "全身带电的小家伙,跑得飞快,一不小心就“嗞啦”一下!",
|
|||
|
"image": "./images/thunder_pet.png",
|
|||
|
"sound": "./sounds/thunder.mp3"
|
|||
|
},
|
|||
|
"wind": {
|
|||
|
"name": "小风灵",
|
|||
|
"desc": "像风一样自由自在,轻盈地守护着大家,还会吹走烦恼哦!",
|
|||
|
"image": "./images/wind_pet.png",
|
|||
|
"sound": "./sounds/wind.mp3"
|
|||
|
},
|
|||
|
"earth": {
|
|||
|
"name": "小土地",
|
|||
|
"desc": "稳重又强壮的大地守护者,是伙伴们最坚实的后盾!",
|
|||
|
"image": "./images/earth_pet.png",
|
|||
|
"sound": "./sounds/earth.mp3"
|
|||
|
},
|
|||
|
"dark": {
|
|||
|
"name": "小黑星",
|
|||
|
"desc": "神秘的黑夜精灵,能在安静中保护大家不受惊吓!",
|
|||
|
"image": "./images/dark_pet.png",
|
|||
|
"sound": "./sounds/dark.mp3"
|
|||
|
},
|
|||
|
"light": {
|
|||
|
"name": "小光星",
|
|||
|
"desc": "闪闪发光的光明使者,总能把温暖和希望带给大家!",
|
|||
|
"image": "./images/light_pet.png",
|
|||
|
"sound": "./sounds/light.mp3"
|
|||
|
},
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
# 创建主窗口
|
|||
|
root = tk.Tk()
|
|||
|
root.title("魔法宠物生成器")
|
|||
|
root.geometry("400x500")
|
|||
|
root.config(bg="lightyellow")
|
|||
|
|
|||
|
# 标题标签
|
|||
|
title_label = tk.Label(root, text="🎉 你的魔法宠物诞生啦!", font=("Arial", 16, "bold"), bg="lightyellow")
|
|||
|
title_label.pack(pady=10)
|
|||
|
|
|||
|
# 图像显示标签
|
|||
|
image_label = tk.Label(root, bg="lightyellow")
|
|||
|
image_label.pack(pady=10)
|
|||
|
|
|||
|
# 宠物介绍标签
|
|||
|
info_label = tk.Label(root, text="", font=("Arial", 12), wraplength=300, justify="center", bg="lightyellow")
|
|||
|
info_label.pack(pady=10)
|
|||
|
|
|||
|
# 保存照片引用(避免垃圾回收)
|
|||
|
current_photo = None
|
|||
|
|
|||
|
# 生成宠物的函数
|
|||
|
def generate_pet():
|
|||
|
global current_photo
|
|||
|
pet_type = random.choice(list(pets.keys()))
|
|||
|
pet = pets[pet_type]
|
|||
|
|
|||
|
# 显示宠物描述
|
|||
|
info_label.config(text=f"名字:{pet['name']}\n\n介绍:{pet['desc']}")
|
|||
|
|
|||
|
# 加载并显示图像(使用 Pillow)
|
|||
|
img_path = pet['image']
|
|||
|
if os.path.exists(img_path):
|
|||
|
img = Image.open(img_path).convert("RGB")
|
|||
|
img = img.resize((200, 200))
|
|||
|
photo = ImageTk.PhotoImage(img)
|
|||
|
image_label.config(image=photo)
|
|||
|
current_photo = photo # 避免图像被回收
|
|||
|
else:
|
|||
|
image_label.config(image='')
|
|||
|
|
|||
|
# 播放声音
|
|||
|
sound_path = pet['sound']
|
|||
|
if os.path.exists(sound_path):
|
|||
|
pygame.mixer.music.load(sound_path)
|
|||
|
pygame.mixer.music.play()
|
|||
|
|
|||
|
# 按钮
|
|||
|
generate_button = tk.Button(root, text="🎲 生成魔法宠物", font=("Arial", 14), command=generate_pet, bg="skyblue")
|
|||
|
generate_button.pack(pady=20)
|
|||
|
|
|||
|
# 启动主循环
|
|||
|
root.mainloop()
|