没有使用 Xcode 的 PyObjC 教程

6
我正在编写一个小型跨平台wxPython应用程序,但在每个平台上都需要使用一些特定于平台的API。在Mac OS上,可以使用PyObjC实现。
我正在寻找如何使用PyObjC的教程。然而,到目前为止我发现的所有教程都是使用Xcode的。我希望我的应用程序能够在mac/win/lin上运行,而不需要进行任何更改,并且我不想在Xcode中开发它。有没有办法?
更新:更具体地说,我需要访问来自Mac OS X的一些笔记本电脑事件,并希望使用PyObjC实现(我没有看到其他方法)。

2
我也有同样的问题。我也搜索了一下,但是没有找到一个好的解决方案。我编写了一些AppleScript代码作为包装器,并且可以在Mac上使用我的应用程序。但是能够在没有XCode的情况下使用PyObjC将是很好的。 - Sam
2个回答

11
您可以导入Foundation和AppKit模块,然后创建NSApplication子类。但是,如果您的pyobjc代码不是代码的入口点,那么可能这不是您所寻找的。您能否更具体地说明您正在尝试使用pyobjc做什么?
以下是使用pyobjc制作简单状态栏应用程序的快速示例,无需使用xcode:
import objc
from Foundation import *
from AppKit import *
from PyObjCTools import AppHelper

class MyApp(NSApplication):

    def finishLaunching(self):
        # Make statusbar item
        statusbar = NSStatusBar.systemStatusBar()
        self.statusitem = statusbar.statusItemWithLength_(NSVariableStatusItemLength)
        self.icon = NSImage.alloc().initByReferencingFile_('icon.png')
        self.icon.setScalesWhenResized_(True)
        self.icon.setSize_((20, 20))
        self.statusitem.setImage_(self.icon)

        #make the menu
        self.menubarMenu = NSMenu.alloc().init()

        self.menuItem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('Click Me', 'clicked:', '')
        self.menubarMenu.addItem_(self.menuItem)

        self.quit = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('Quit', 'terminate:', '')
        self.menubarMenu.addItem_(self.quit)

        #add menu to statusitem
        self.statusitem.setMenu_(self.menubarMenu)
        self.statusitem.setToolTip_('My App')

    def clicked_(self, notification):
        NSLog('clicked!')

if __name__ == "__main__":
    app = MyApp.sharedApplication()
    AppHelper.runEventLoop()

您可以使用py2app使其可分发:

from distutils.core import setup
import py2app

NAME = 'myapp'
SCRIPT = 'myapp.py'
VERSION = '0.1'
ID = 'myapp'

plist = dict(
     CFBundleName                = NAME,
     CFBundleShortVersionString  = ' '.join([NAME, VERSION]),
     CFBundleGetInfoString       = NAME,
     CFBundleExecutable          = NAME,
     CFBundleIdentifier          = 'com.yourdn.%s' % ID,
     LSUIElement                 = '1', #makes it not appear in cmd-tab task list etc.
)


app_data = dict(script=SCRIPT, plist=plist)

setup(
   app = [app_data],
   options = {
       'py2app':{
           'resources':[
               ],
           'excludes':[
               ]
           }
       }
)

0
你需要 Xcode 做什么?如果你需要它来创建窗口/图形用户界面(*.nib,*.xib 文件),那么你可以尝试搜索“不使用 Xcode 创建 *.nib,*xib”。 这只是一个搜索提示,而不是满意的答案。

1
我在这个intro中找到了两种方法,没有说必须使用Xcode。底部有关于py2appIDE方法:Xcode的内容。希望这能帮到你。正如所说,我不是专家。 - cl_progger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接