Python 如何在PyObjC中正确构造主菜单?
我正在以编程方式在PyObjC中创建具有此层次结构的菜单Python 如何在PyObjC中正确构造主菜单?,python,objective-c,cocoa,pyobjc,Python,Objective C,Cocoa,Pyobjc,我正在以编程方式在PyObjC中创建具有此层次结构的菜单 NSMenu (setMainMenu on NSApplication) - NSMenuItem(1) - NSMenu: "App Name" - NSMenuItem(1) - NSMenuItem(2) ... - NSMenuItem(2) - NSMenu: "File" - NSMenuItem(1) - NSMenuItem(2) ... - NSMenuItem(
NSMenu (setMainMenu on NSApplication)
- NSMenuItem(1)
- NSMenu: "App Name"
- NSMenuItem(1)
- NSMenuItem(2)
...
- NSMenuItem(2)
- NSMenu: "File"
- NSMenuItem(1)
- NSMenuItem(2)
...
- NSMenuItem(3)
- NSMenu: "Edit"
- NSMenuItem(1)
- NSMenuItem(2)
...
...
然而,所有PyObjC应用程序显示都是一个“Python”菜单,其中包含应该位于“app Name”下的项目
如何使其正常运行?Python”菜单可能是Python.framework中隐藏的Python.app应用程序中main menu.nib的菜单。该应用程序使在命令行脚本中使用GUI API成为可能,而不必求助于私有API
获得正确行为的最佳方法是通过或手动创建应用程序包。您确实需要一个正确的应用程序包装,并尽可能多地使用Cocoa,包括一个主xib文件。@bbum是的,我知道。我只是无法忍受Objective-C和IB并试图找到替代方案。FWIW我仍在研究PyObjC,将来可能会研究一个很好的解决方案,因为Xcode的Interface Builder组件在每个版本中对PyObjC都不太有用。这个(旧)网页似乎记录了如何从代码创建菜单,尽管这使用私有API,因此可能不是正确的解决方案:最后:除非您使用py2app(或其他方式构建应用程序包),否则您得到的“Python”菜单很可能是Python.framework中隐藏的Python.app应用程序的main menu.nib中定义的菜单。您完全正确!我在PyObjC中寻找的dock图标实际上来自/System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app。从你链接的博客文章系列的第1部分来看,实际上不可能从头开始创建菜单,因为它是通过一些私有API创建的(这太疯狂了!)。我不知道你是否不能从头开始创建菜单,我发现的页面使用了一个私有API,但我认为这不太可能只有私有API来完成。我希望在不久的将来有时间完全从代码中生成GUI(与旧的struts系统相比,使用auto layout应该更可行),我等不及你的博文了!;)同时,我放弃了,只会用笔尖。