代码之家  ›  专栏  ›  技术社区  ›  gyim

如何在不打开任何窗口的情况下更改wxpython中的osx菜单栏?

  •  4
  • gyim  · 技术社区  · 14 年前

    我正在编写一个wxpython应用程序,该应用程序在关闭所有窗口后仍保持打开状态,因此您仍然可以将新文件拖放到OSX Dock图标上(我使用 myApp.SetExitOnFrameDelete(False) )

    不幸的是,如果我关闭所有窗口,OSX菜单栏将只包含一个“帮助”菜单。我想至少添加一个文件/打开菜单项,或者只保留主窗口的菜单栏。这在Wxpython有可能吗?

    事实上,我对非wxpython黑客也很满意(例如,在pyobjc中设置菜单,但在wxpython中运行GUI的其余部分)。无论如何,OSX中的Wxpython开发就是一个黑客;)

    更新 :我用林德赛·弗格森的提示解决了这个问题。以下是我所做的:

    • 启动时,我会创建一个窗口,立即显示和隐藏。我把它的位置设为 (-10000,-10000) 这样它就不会在屏幕上闪烁(啊,真是一个肮脏的黑客!)
    • 我在该窗口中创建一个空的evt_close事件处理程序,以便它无法关闭。
    • 似乎销毁一个窗口会重置OSX菜单,但隐藏不会…所以,当最后一个窗口关闭时,我需要再次显示和隐藏这个窗口(隐藏是必要的,这样用户就不能使用窗口菜单或命令切换到这个窗口-`)

    是的,这真的很难看…如果有人提出一个更漂亮的解决方案,我将非常感激。

    更新2: 事实上,它可以用一种更简单的方法来解决:如果我们不这样做 关闭 只有最后一扇窗户 隐藏 它。确保它不再响应菜单事件。

    1 回复  |  直到 10 年前
        1
  •  1
  •   Lyndsey Ferguson    14 年前

    你能创造一个 隐藏的 屏幕外的某个窗口?这是一个黑客,但我记得必须做很多黑客,使我的基于wxpython的应用程序在mac os x上正常工作。

    注: 你必须禁用关闭按钮并设置它 隐藏的 窗口,这样它就不会出现在窗口菜单中。

    旁白: 您是否考虑过将Python应用程序的GUI部分分解出来,并在Mac OS X上使用pyobjc?你会有更多的本土行为…