You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MacOS下PySimpleGUI菜单栏不显示问题求助

PySimpleGUI菜单栏在MacOS Ventura 13.4.1下不显示的解决办法

问题背景

在MacOS Ventura 13.4.1系统的PyCharm环境中运行PySimpleGUI菜单栏代码时,菜单栏完全不显示。尝试过更换代码、重装/升级PySimpleGUI、重建项目等操作,均无效,且PySimpleGUI默认主菜单也未出现在预期位置。

相关代码如下:

import PySimpleGUI as sg

menu_def = [['File', ['New', 'Open', 'Save', 'Exit']],
            ['Edit', ['Cut', 'Copy', 'Paste', 'Undo']],
            ['Help', 'About...']]

layout = [[sg.Menu(menu_def)],
          [sg.Multiline("", key='-IN-',
                        expand_x=True, expand_y=True)],
          [sg.Multiline("", key='-OUT-',
                        expand_x=True, expand_y=True)],
          [sg.Text("", key='-TXT-',
                   expand_x=True, font=('Arial Bold', 14))]
]

window = sg.Window('Menu', layout, size=(715, 300))

while True:
    event, values = window.read()
    print(event, values)

    if event != sg.WIN_CLOSED:
        window['-TXT-'].update(values[0] + "Menu Button Clicked")
    if event == 'Copy':
        txt = window['-IN-'].get()
    if event == 'Paste':
        window['-OUT-'].update(value=window['-IN-'].get())
    if event == sg.WIN_CLOSED:
        break

window.close()

解决步骤

1. 检查MacOS菜单栏的显示逻辑

MacOS的菜单栏默认显示在屏幕顶部,而非窗口内部。运行程序后,点击PySimpleGUI窗口使其处于激活状态,再查看屏幕顶部的菜单栏是否出现——未激活窗口时,顶部会显示当前活跃应用的菜单。

2. 强制使用Tkinter内置菜单栏模式

PySimpleGUI在MacOS上默认调用系统原生菜单,可能存在兼容性问题。创建窗口时添加native_menu=False参数,强制使用Tkinter的内置菜单栏:

window = sg.Window('Menu', layout, size=(715, 300), native_menu=False)

3. 调整PySimpleGUI版本适配

部分新版本PySimpleGUI对MacOS Ventura的适配存在问题,可尝试降级到稳定版本(如4.60.x系列):

pip install PySimpleGUI==4.60.5

也可以尝试升级到最新版,确认是否已修复相关兼容问题:

pip install --upgrade PySimpleGUI

4. 排除PyCharm环境干扰

  • 确认PyCharm使用的Python解释器已正确安装PySimpleGUI:在PyCharm终端运行pip list查看包版本。
  • 直接在系统终端(而非PyCharm内置终端)运行脚本,排除IDE环境的影响。

5. 用极简代码验证菜单功能

运行以下最小化示例,确认菜单是否能正常显示:

import PySimpleGUI as sg

menu_def = [['File', ['Exit']]]
layout = [[sg.Menu(menu_def)], [sg.Text("测试菜单")]]
window = sg.Window('测试', layout)

while True:
    event, _ = window.read()
    if event == sg.WIN_CLOSED or event == 'Exit':
        break

window.close()

如果此代码能正常显示菜单,说明原代码中的其他组件可能干扰了菜单渲染,可逐步添加原代码组件排查问题。

内容的提问来源于stack exchange,提问作者Niuniu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 17:43:03