如何在PySimpleGUI的菜单项中添加图片/图标?
PySimpleGUI菜单项添加图标实现方案
PySimpleGUI本身没有直接提供菜单项添加图标的API,但由于它底层基于Tkinter,我们可以通过调用Tkinter的原生组件方法来实现图标与文字并排显示的效果,以下是具体实现步骤和代码示例:
实现步骤
- 先定义PySimpleGUI的菜单布局并创建窗口
- 获取窗口对应的Tkinter根对象及菜单的原生组件
- 使用Tkinter的
entryconfig方法为指定菜单项设置图标,并通过compound参数控制图标位置
代码示例
import PySimpleGUI as sg from PIL import Image, ImageTk # 定义菜单结构 menu_layout = [ ['文件', ['打开', '保存', '退出']], ['编辑', ['复制', '粘贴']] ] # 创建带菜单的窗口 window = sg.Window('带图标菜单示例', layout=[[sg.Menu(menu_layout)]]) # 获取Tkinter原生菜单组件 root = window.TKroot main_menu = window.MenuBar.TK_Menubar # 加载并处理图标(建议尺寸16x16,适配菜单显示) open_icon = Image.open('open_icon.png').resize((16, 16)) tk_open_icon = ImageTk.PhotoImage(open_icon) # 为"打开"菜单项设置左侧图标 main_menu.entryconfig('打开', image=tk_open_icon, compound='left') # 处理子菜单图标示例(以"编辑"菜单下的"复制"为例) edit_menu = main_menu.nametowidget(main_menu.entrycget('编辑', 'menu')) copy_icon = Image.open('copy_icon.png').resize((16, 16)) tk_copy_icon = ImageTk.PhotoImage(copy_icon) edit_menu.entryconfig('复制', image=tk_copy_icon, compound='left') # 事件循环 while True: event, values = window.read() if event == sg.WIN_CLOSED or event == '退出': break window.close()
注意事项
- 需保留Tkinter图片对象的引用(如示例中的
tk_open_icon),避免被Python垃圾回收导致图标消失 - 图标尺寸建议与菜单文字高度匹配,防止显示错位
- 若需为多级子菜单设置图标,需逐级获取对应子菜单的Tkinter原生对象后再调用
entryconfig
内容的提问来源于stack exchange,提问作者Tanay Ash
相关产品推荐
相关产品推荐

