- 创建 .idea 目录和相关配置文件,设置项目结构 - 添加多个课堂成果示例代码,涵盖不同主题和功能 - 创建和配置 .gitignore 文件,忽略特定文件和目录
105 lines
2.9 KiB
Python
105 lines
2.9 KiB
Python
import tkinter as tk
|
|
from PIL import Image, ImageTk
|
|
|
|
# 角色数据
|
|
characters = [
|
|
{
|
|
"name": "铠",
|
|
"quote": "",
|
|
"image": "images/凯.png"
|
|
},
|
|
{
|
|
"name": "李白",
|
|
"quote": "",
|
|
"image": "images/李白.png"
|
|
},
|
|
{
|
|
"name": "甄姬",
|
|
"quote": "",
|
|
"image": "images/甄姬.png"
|
|
},
|
|
{
|
|
"name": "百里守约",
|
|
"quote": "",
|
|
"image": "images/百里守约.png"
|
|
},
|
|
{
|
|
"name": "钟馗",
|
|
"quote": "",
|
|
"image": "images/钟馗.png"
|
|
}
|
|
]
|
|
|
|
# 图片等比缩放
|
|
def resize_image_keep_aspect(image, max_width=300, max_height=360):
|
|
ratio = min(max_width / image.width, max_height / image.height)
|
|
new_size = (int(image.width * ratio), int(image.height * ratio))
|
|
return image.resize(new_size, Image.Resampling.LANCZOS)
|
|
|
|
class RoleSwitcherApp:
|
|
def __init__(self, master):
|
|
self.master = master
|
|
self.master.title("角色切换器")
|
|
self.master.geometry("420x600") # 固定窗口大小
|
|
self.master.resizable(False, False) # 禁止缩放
|
|
self.index = 0
|
|
|
|
# 图片区域
|
|
self.image_label = tk.Label(master)
|
|
self.image_label.pack(pady=10)
|
|
|
|
# 名字
|
|
self.name_label = tk.Label(master, text="", font=("Arial", 16))
|
|
self.name_label.pack()
|
|
|
|
# 对话框区域
|
|
self.dialog_frame = tk.Frame(master, bg="#f0f0f0", padx=10, pady=10)
|
|
self.dialog_frame.pack(padx=10, pady=10, fill="x")
|
|
|
|
self.quote_label = tk.Label(
|
|
self.dialog_frame,
|
|
text="",
|
|
font=("微软雅黑", 13),
|
|
wraplength=400,
|
|
justify="left",
|
|
anchor="w"
|
|
)
|
|
self.quote_label.pack()
|
|
|
|
# 按钮区域
|
|
btn_frame = tk.Frame(master)
|
|
btn_frame.pack(pady=10)
|
|
|
|
tk.Button(btn_frame, text="← 上一个", command=self.prev_character).pack(side="left", padx=20)
|
|
tk.Button(btn_frame, text="下一个 →", command=self.next_character).pack(side="left", padx=20)
|
|
|
|
# 键盘控制
|
|
master.bind("<Left>", lambda event: self.prev_character())
|
|
master.bind("<Right>", lambda event: self.next_character())
|
|
|
|
self.update_display()
|
|
|
|
def update_display(self):
|
|
char = characters[self.index]
|
|
self.name_label.config(text=f"角色:{char['name']}")
|
|
|
|
image = Image.open(char["image"])
|
|
image = resize_image_keep_aspect(image)
|
|
self.tk_image = ImageTk.PhotoImage(image)
|
|
self.image_label.config(image=self.tk_image)
|
|
|
|
self.quote_label.config(text=f"“{char['quote']}”")
|
|
|
|
def next_character(self):
|
|
self.index = (self.index + 1) % len(characters)
|
|
self.update_display()
|
|
|
|
def prev_character(self):
|
|
self.index = (self.index - 1) % len(characters)
|
|
self.update_display()
|
|
|
|
if __name__ == "__main__":
|
|
root = tk.Tk()
|
|
app = RoleSwitcherApp(root)
|
|
root.mainloop()
|