如何将功能绑定到tkinter下拉列表,选中选项后展示对应内容
实现方案
你当前的程序运行截图如下:
核心调整逻辑
- 为OptionMenu绑定选中事件回调,每次用户选择歌手时触发内容更新
- 预先存储所有歌手对应的图片、音频资源映射关系,无需为每个歌手单独定义播放/停止/图片加载方法
- 把动态展示的图片、播放按钮、停止按钮设为实例属性,每次切换选中歌手时,先销毁上一个歌手的相关组件,再渲染当前选中歌手的对应内容,未选中歌手时默认不渲染任何动态组件
完整修改后代码
import pygame from tkinter import * from PIL import ImageTk, Image root = Tk() root.title("Hip-Hop-Flow") root.iconbitmap("22.ico") root.geometry("800x600") pygame.mixer.init() class Vini: def __init__(self): # 所有歌手的资源映射,可按需扩展 self.rapper_info = { "Vinnie Paz": {"img": "vini.gif", "audio": "vinnie flow.mp3"}, "Sean Price": {"img": "sean.gif", "audio": "sean flow.mp3"}, "Big L": {"img": "bigl.gif", "audio": "bigl flow.mp3"}, "Canibus": {"img": "canibus.gif", "audio": "canibus flow.mp3"} } self.rappers = list(self.rapper_info.keys()) self.menu = StringVar() self.menu.set("List of rappers") # 下拉菜单绑定选中回调 siis_chamoshla = OptionMenu(root, self.menu, *self.rappers, command=self.update_rapper_content) siis_chamoshla.configure(width=30, bg="white") siis_chamoshla.pack() # 初始化动态组件属性,默认都为None self.img_label = None self.play_button = None self.stop_button = None def update_rapper_content(self, selected_rapper): # 先销毁上一个歌手的所有动态组件 if self.img_label: self.img_label.destroy() if self.play_button: self.play_button.destroy() if self.stop_button: self.stop_button.destroy() # 停止之前播放的音频 pygame.mixer.music.stop() # 获取当前选中歌手的资源 current_info = self.rapper_info[selected_rapper] # 加载展示图片 self.rapper_photo = ImageTk.PhotoImage(Image.open(current_info["img"])) self.img_label = Label(image=self.rapper_photo) self.img_label.pack() # 播放方法 def play_current(): pygame.mixer.music.load(current_info["audio"]) pygame.mixer.music.play(loops=0) # 停止方法 def stop_current(): pygame.mixer.music.stop() # 渲染按钮 self.play_button = Button(root, text="Play", font=("Helvetica", 20), command=play_current) self.play_button.pack(pady=20) self.stop_button = Button(root, text="Stop", font=("Helvetica", 20), command=stop_current) self.stop_button.pack(pady=20) pazienza = Vini() root.mainloop()
注意事项
- 你需要提前把其他3位歌手对应的图片、音频文件按照
self.rapper_info里配置的命名放到程序同级目录,或修改配置里的路径为你本地实际文件路径 - 初始状态下仅展示下拉框,选中任意歌手后才会渲染对应图片和按钮,切换歌手时会自动清空上一位歌手的内容和正在播放的音频
内容的提问来源于stack exchange,提问作者Michel Basquiat
相关产品推荐
相关产品推荐

