Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在PyObjC中正确构造主菜单?_Python_Objective C_Cocoa_Pyobjc - Fatal编程技术网

Python 如何在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(

我正在以编程方式在PyObjC中创建具有此层次结构的菜单

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应该更可行),我等不及你的博文了!;)同时,我放弃了,只会用笔尖。