Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。
想要改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。
2年前关闭。
Improve this question
我正在编写一个跨平台的小型wxPython应用程序,但是在每个平台上我都需要使用一些特定于平台的API。在Mac OS上,可以使用PyObjC完成。
我正在寻找有关如何使用PyObjC的教程。但是,到目前为止,我发现的只是有关Xcode的教程。我希望我的应用程序能够在mac/win/lin上运行而无需更改,并且我不想在Xcode中开发它。有办法吗?
UPD。 要更具体一点,我需要从Mac OS X访问一些笔-平板电脑事件,并且我想为此使用PyObjC(我没有看到其他方法)。
然后,您可以使用py2app使其可分发:
想要改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。
2年前关闭。
Improve this question
我正在编写一个跨平台的小型wxPython应用程序,但是在每个平台上我都需要使用一些特定于平台的API。在Mac OS上,可以使用PyObjC完成。
我正在寻找有关如何使用PyObjC的教程。但是,到目前为止,我发现的只是有关Xcode的教程。我希望我的应用程序能够在mac/win/lin上运行而无需更改,并且我不想在Xcode中开发它。有办法吗?
UPD。 要更具体一点,我需要从Mac OS X访问一些笔-平板电脑事件,并且我想为此使用PyObjC(我没有看到其他方法)。
最佳答案
您可以导入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':[
]
}
}
)
关于python - 没有Xcode的PyObjC教程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4994058/
10-12 22:30