我在XCode中创建了一个全新的项目,并在我的AppDelegate.py文件中包含以下内容:
from Foundation import *
from AppKit import *
class MyApplicationAppDelegate(NSObject):
def applicationDidFinishLaunching_(self, sender):
NSLog("Application did finish launching.")
statusItem = NSStatusBar.systemStatusBar().statusItemWithLength_(NSVariableStatusItemLength)
statusItem.setTitle_(u"12%")
statusItem.setHighlightMode_(TRUE)
statusItem.setEnabled_(TRUE)
Run Code Online (Sandbox Code Playgroud)
但是,当我启动应用程序时,不显示任何状态栏项.main.py和main.m中的所有其他代码都是默认的.
我一直想要玩Ruby或Python,同时我一直想做一些Cocoa编程.
所以我认为实现这两个目标的最好方法是使用Ruby或Python到Objective-C桥(PyObjc或RubyCocoa)开发一些东西.
我知道理想情况下,为了获得最好的学习经历,我会独立学习每个技术,但我没有时间.:)
所以我的问题是哪个是更成熟的平台,PyObc或RubyCocoa,我正在寻找的主要内容:
关于第5点,我不希望整个Cocoa API可以通过任何一个桥接器获得,但我需要有足够的Cocoa API来开发一个正常运行的应用程序.
我有一个作为Cocoa单文档应用程序构建的XCode项目(它不是Python-Cocoa应用程序,这不是我想要的).
我发现的所有文档都假设我想创建一个Cocoa应用程序,其代码用Python编写,但事实并非如此 - 我想要一个标准的Cocoa应用程序来调用Python类中的方法.
我可以使用PyObjC从文件运行python代码而不用main.py文件替换Cocoa标准main.c吗?
稍后编辑:我知道Python.framework,但据我所知,我只能通过环境向PyRun_SimpleFile发送参数 - 我想直接使用桥接器与python代码交换数据.
使用PyObjC,是否可以导入Python模块,调用函数并获得结果(例如)NSString?
例如,执行以下Python代码的等效操作:
import mymodule
result = mymodule.mymethod()
Run Code Online (Sandbox Code Playgroud)
..in伪ObjC:
PyModule *mypymod = [PyImport module:@"mymodule"];
NSString *result = [[mypymod getattr:"mymethod"] call:@"mymethod"];
Run Code Online (Sandbox Code Playgroud) 环境:MacOS X 10.7.2,系统安装python 2.7.1,virtualenv 1.7.2,pyobjc 2.3,py2app 0.6.4+
我有一个新创建的virtualenv安装了pyobc 2.3和py2app.当我运行python setup.py py2app来创建一个应用程序时(例如在py2app/examples/simple中),一切似乎都在编译,它确实产生了一个双击应用程序,但点击该应用程序后,我收到以下错误:
A Python runtime not could be located. You may need to install a framework build of Python, or edit the PyRuntimeLocations array in this application's Info.plist file.
Run Code Online (Sandbox Code Playgroud)
但是,如果我在Lion的标准安装中遵循相同的过程.该应用程序功能良好,符合预期.
关于如何让virtualenv和py2app相互配合的任何建议?
谢谢!
我正在尝试从我的python脚本向Mountain Lion发送通知,并对通知的点击做出反应.现在可以完美地发送通知.但是,我无法让Lion在点击后回拨我的剧本.
这就是我的工作.我实现了一个Notification类.该类实例的唯一目的是通过调用提供通知notify().在同一方法中,我将对象设置为app的委托.
import Foundation
import objc
import AppKit
class MountainLionNotification(Foundation.NSObject, Notification):
def notify(self, title, subtitle, text, url):
NSUserNotification = objc.lookUpClass('NSUserNotification')
NSUserNotificationCenter = objc.lookUpClass('NSUserNotificationCenter')
notification = NSUserNotification.alloc().init()
notification.setTitle_(str(title))
notification.setSubtitle_(str(subtitle))
notification.setInformativeText_(str(text))
notification.setSoundName_("NSUserNotificationDefaultSoundName")
notification.setUserInfo_({"action":"open_url", "value":url})
AppKit.NSApplication.sharedApplication().setDelegate_(self)
NSUserNotificationCenter.defaultUserNotificationCenter().scheduleNotification_(notification)
def applicationDidFinishLaunching_(self, sender):
userInfo = sender.userInfo()
if userInfo["action"] == "open_url":
import subprocess
subprocess.Popen(['open', userInfo["value"]])
Run Code Online (Sandbox Code Playgroud)
现在我希望applicationDidFinishLaunching_()在点击通知时被调用.不幸的是,从未发生过 我究竟做错了什么?
我不打算将项目放在App Store上
简短问题 - 是否有任何最新的PyObjC教程,用于将python脚本嵌入到用Objective-C和/或swift编写的iOS应用程序中?如果没有,是否有任何最新的方法来实现相同的目标?
背景:我想在objective-c ios应用程序中运行一堆python脚本.我尝试了几件事:
我已经尝试使用python.framework,但我得到了"无法构建Python模块"错误.在谷歌搜索帮助后,我意识到python.framework在iOS上不起作用 - 在iOS应用程序中运行python脚本
PyObjC - 为了实验,我设法让生成的*.plugin在OS X上运行.我按照本教程 - https://pythonhosted.org/pyobjc/tutorials/embedded.html 在iOS上使用相同的方法,它无法编译
我看起来很高,有关如何处理拖放到OSX中的扩展坞的信息.拖放文档(http://developer.apple.com/documentation/Cocoa/Conceptual/DragandDrop/DragandDrop.html#//apple_ref/doc/uid/10000069)我发现所有处理从视图拖动到视图.如果有人能指出我的代码样本,那将是非常好的.
我正在使用PyObjC新娘编写我的应用程序,但Cocoa示例同样受欢迎:-)
我正在编写一个桌面使用情况统计应用程序。它运行一个后台守护程序,该守护程序定期唤醒,查找当前焦点的应用程序窗口的名称并将该数据记录在数据库中。
我设法在 xprop 实用程序的帮助下在 Linux 桌面上执行此操作(您可以在此处找到它)。
我怎样才能在 Mac OSX 上做同样的事情?有没有直接/间接的方法可以从 python 脚本中执行此操作?(PyObjC?)
我能找到的唯一参考文献表明理论上可以使用python编写iOS应用程序.有谁知道以这种方式编写的应用程序的任何示例?
pyobjc ×10
python ×9
cocoa ×4
ios ×2
macos ×2
objective-c ×2
desktop ×1
osx-lion ×1
py2app ×1
ruby ×1
ruby-cocoa ×1
virtualenv ×1
xcode ×1