import tkinter as tk from PIL import Image, ImageTk from alien_invasion import AlienInvasion class ImageSwitcher: def __init__(self, master, images_paths): self.master = master self.master.title("选择你想要的飞机") self.images = [] self.image_frames = [] self.current_image_index = 0 rows = (len(images_paths) - 1) // 3 + 1 column = 0 row = 0 for i, path in enumerate(images_paths): frame = tk.Frame(master) img = Image.open(path) img = img.resize((400, 260), Image.BICUBIC) img_tk = ImageTk.PhotoImage(img) self.images.append(img_tk) image_label = tk.Label(frame, image=img_tk) image_label.grid(row=0, column=0, padx=5, pady=5) # 在frame内部使用grid button = tk.Button(frame, text=f"选择飞机 {i+1}", command=lambda index=i: self.switch_image(index), font=("Arial", 18), padx=10, pady=5) button.grid(row=0, column=1, padx=5, pady=5) # 在frame内部与图片并排 # 将frame添加到master中,但注意使用grid而不是pack frame.grid(row=row, column=column, padx=10, pady=10) # 更新行列索引以进行下一组图片和按钮的放置 column += 2 # 因为每个frame包含1个图片和1个按钮,所以column增加2 if column >= 3: # 假设每行3个组合 column = 0 row += 1 # 添加"确定"按钮到master的底部 button_show = tk.Button(master, text="确定", command=self.on_button_click, font=("Arial", 18), padx=10, pady=5) button_show.grid(row=rows, column=0, columnspan=3, pady=10) # 使其横跨3列 def show_current_image(self): for frame in self.image_frames: frame.pack_forget() current_frame = self.image_frames[self.current_image_index] current_frame.pack(pady=10) def switch_image(self, index): if 0 <= index < len(self.images): self.current_image_index = index self.show_current_image() def on_button_click(self): selected_image_path = images_paths[self.current_image_index] alien_invasion = AlienInvasion(selected_image_path) alien_invasion.run_game(selected_image_path) self.master.destroy() print(f"用户选择了图片: {selected_image_path}") images_paths = ["images\火箭1.png", "images\火箭2.png", "images\火箭3.png","images\火箭4.png"] def category(): root = tk.Tk() root.geometry("1200x700") root.configure(background='#666666') # 白色背景 app = ImageSwitcher(root, images_paths) root.mainloop()