sg.Menu() 用法示例

在 PySimpleGUI 中,菜单项的事件处理与按钮的事件处理方式相同。当用户点击菜单项时,会返回一个事件字符串,你可以在事件循环中捕获并处理这些事件。

以下是修改后的代码,添加了 "打开""退出" 菜单项的事件处理:

完整代码示例

import PySimpleGUI as sg

# 定义菜单栏
menu_def = [
    ['文件', ['打开', '保存', '退出']],
    ['编辑', ['剪切', '复制', '粘贴']],
    ['帮助', ['关于']],
]

layout = [
    [sg.Menu(menu_def)],
    [sg.Text('这是一个带菜单栏的窗口')],
    [sg.Button('确定')]
]

window = sg.Window('菜单示例', layout)

while True:
    event, values = window.read()
    
    # 处理窗口关闭事件
    if event == sg.WIN_CLOSED:
        break
    
    # 处理菜单项事件
    elif event == '打开':
        sg.popup('你点击了"打开"菜单', title='提示')
        # 这里可以添加打开文件的逻辑,例如:
        # filename = sg.popup_get_file('选择要打开的文件')
        # if filename:
        #     print(f'打开文件: {filename}')
    
    elif event == '保存':
        sg.popup('你点击了"保存"菜单', title='提示')
        # 这里可以添加保存文件的逻辑
    
    elif event == '退出':
        # 确认是否退出
        if sg.popup_yes_no('确定要退出吗?', title='确认') == 'Yes':
            break
    
    elif event == '关于':
        sg.popup('这是一个 PySimpleGUI 菜单示例\n版本 1.0', title='关于')
    
    # 其他事件(如按钮点击)
    elif event == '确定':
        sg.popup('你点击了"确定"按钮')

window.close()

关键点说明

  1. 菜单事件捕获

    • 当用户点击 "打开" 菜单时,event 的值是 '打开'(与菜单定义中的字符串一致)。
    • 同理,"退出" 菜单的事件是 '退出'
  2. 事件处理逻辑

    • 使用 if-elif 结构检查 event 的值,并执行对应的操作。
    • 例如,点击 "打开" 时,弹出一个提示框(sg.popup)。
  3. 退出确认

    • "退出" 事件中,使用 sg.popup_yes_no 让用户确认是否真的要退出。
  4. 文件操作

    • 如果需要实际打开/保存文件,可以使用:
      • sg.popup_get_file():打开文件选择对话框。
      • sg.popup_get_folder():选择文件夹。

扩展:带子菜单的事件处理

如果菜单有子菜单(如 ['新建', ['文件', '窗口']]),事件会返回 '新建文件''新建窗口',可以直接在 elif 中匹配:

menu_def = [
    ['文件', ['新建', ['新建文件', '新建窗口'], '打开', '保存']],
]

# 在事件循环中:
elif event == '新建文件':
    sg.popup('创建新文件')
elif event == '新建窗口':
    sg.popup('创建新窗口')

总结

  • 菜单项的事件名就是菜单定义中的字符串。
  • 使用 sg.popupsg.popup_get_file 等函数可以快速实现交互。
  • 通过 if-elif 结构处理不同菜单项的逻辑。

运行代码后,点击菜单项即可看到对应的事件处理效果!

posted @ 2025-12-22 15:40  nxhujiee  阅读(1)  评论(0)    收藏  举报