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("", lambda event: self.prev_character()) master.bind("", 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()