Xcode 3具有用于在Python中构建Cocoa子类的模板.我最近升级到了Xcode 4,但是我不知道如何在Xcode 4中使用除C系列(C,C++,Obj-C)之外的其他语言.
有人知道吗?
我即将开始我的A-Level计算项目(高中水平),它有望成为Mac OS的销售点应用程序.不幸的是,Objective-C目前还不在我的联盟中,如果我在项目中遇到困难,我没有人帮忙,所以我会在课程部分失败而不能进入大学.所以这对我来说非常重要.
我想用Python来开发一个Cocoa应用程序.我知道我需要PyObjc,但是网上的所有细节似乎都假设它已预先安装.显然Leopard和Snow Leopard就是这种情况,但我似乎没有在Snow Leopard上使用它,也从未在Leopard上注意到它.此外,我已按照Sourceforge页面上的说明尝试安装最新的PyObjc测试版,但没有运气.
如果有人能够了解需要安装的内容,如何以及可以帮助我的任何资源或教程的链接,我将非常感激.
在此先感谢您的帮助!
更新:我看到这是一个很受欢迎的问题,我刚刚得到了"值得注意的问题"徽章,所以我想我会在得到答案之后更新来到此页面的人.
不幸的是,我无法使用Python来创建Mac应用程序.这在当时相当令人失望,但可能是一件好事.我为我的项目在C#中创建了一个Windows应用程序,它是一个在模拟环境中创建和运行Assembly应用程序的工具.我的课程老师现在开始使用我的工具来教授课程而不是他自己的课程!我在计算项目上获得了很高的分数(超过90%),这有助于我在计算机A-Level(最高级别)中获得A*,因此我进入南安普顿大学学习计算机科学.
今年夏天,我决定制作一个iPad应用程序(即将发布),我很高兴地说我知道我可以在Objective-C中制作Mac OS应用程序,因为我觉得我已经学到了足够的东西.我很高兴我花时间学习它,它是一种很棒的语言,对于iOS变得如此受欢迎非常有用.
抱歉所有的吹嘘,但我真的很高兴.我真正想说的是,如果你来这个页面希望使用PyObjc轻松创建Mac应用程序,请不要打扰.这需要一些时间和一些努力,但是一旦你学会了Objective-C,用它创建应用程序真的很令人满意.祝好运!
如何通过Python脚本最小化/最大化macOS中的窗口?在Windows上,有一个win32 api(该ShowWindow()函数)可以执行此操作。我想要等效的macOS。我希望脚本能够从其标题中找到一个窗口,然后将其最小化或最大化。
这可能吗?我认为我需要为此使用pyobjc模块。
我试图使用Python(版本2.7或2.6)和PyObjC(版本2.2)从内置到Macbook Pro中的Apple iSight摄像头捕获单帧.
作为一个起点,我使用了这个旧的StackOverflow问题.为了验证它是否有意义,我交叉引用了它似乎基于的Apple的MyRecorder示例.不幸的是,我的脚本不起作用.
我的重要问题是:
在下面粘贴的示例脚本中,预期的操作是在调用startImageCapture()之后,我应该从CaptureDelegate开始打印"Got a frame ..."消息.但是,相机的指示灯从不打开,代表的回调永远不会执行.
此外,在startImageCapture()期间没有失败,所有函数声称成功,并且它成功找到iSight设备.分析pdb中的会话对象表明它具有有效的输入和输出对象,输出具有分配的委托,设备未被其他进程使用,并且在调用startRunning()之后会话被标记为正在运行.
这是代码:
#!/usr/bin/env python2.7
import sys
import os
import time
import objc
import QTKit
import AppKit
from Foundation import NSObject
from Foundation import NSTimer
from PyObjCTools import AppHelper
objc.setVerbose(True)
class CaptureDelegate(NSObject):
def captureOutput_didOutputVideoFrame_withSampleBuffer_fromConnection_(self, captureOutput,
videoFrame, sampleBuffer,
connection):
# This should get called for every captured frame
print "Got a frame: %s" % videoFrame
class QuitClass(NSObject):
def quitMainLoop_(self, aTimer):
# Just stop the main loop. …Run Code Online (Sandbox Code Playgroud) 在Cocoa中是否有一种方法目前被认为是创建多层或客户端服务器应用程序的最佳实践?
我是一位经验丰富的网络开发人员,我非常喜欢Python.我虽然是Cocoa的新手.我正在写的应用程序是一个大型医院的患者管理系统.预计系统会随着时间的推移存储大量数据,但在单个会话期间传输的数据非常轻(大多数只是文本).假设通信通过本地网络(有线或无线)发生.当然,它必须是高度安全的.
我能想到的最好的方法是编写一个Python REST Web服务并通过Cocoa应用程序连接到它.也许我甚至会使用Python来编写Cocoa应用程序本身.
看看Cocoa,我在Cocoa中看到了非常棒的技术,比如CoreData,但我找不到任何与客户端服务器开发类似的技术.我只是想确保我没有遗漏任何东西.
你怎么看?
真实世界的例子将不胜感激.
提前致谢.
默认情况下,Cocoa-Python应用程序使用版本2.5的默认Python运行时.如何配置我的Xcode项目以便它使用较新的Python 3.0运行时?我尝试用新版本替换项目中包含的Python.framework,但它不起作用.
另外,PyObjc模块是否与新版本的Python兼容?
我想显示内部CoreAnimation层字符串,但不幸的是CATextLayer是不够的,主要是因为它很难使用约束时使用,并要自动换行.
我正在使用NSLayoutManager,使用以下代码(PyObjC):
NSGraphicsContext.saveGraphicsState()
# THIS SOLVES THIS ISSUE
CGContextSetShouldSmoothFonts(ctx, False)
graphics = NSGraphicsContext.graphicsContextWithGraphicsPort_flipped_(ctx, True)
NSGraphicsContext.setCurrentContext_(graphics)
height = size.height
xform = NSAffineTransform.transform();
xform.translateXBy_yBy_(0.0, height)
xform.scaleXBy_yBy_(1.0, -1.0)
xform.concat()
self.textContainer.setContainerSize_(size)
glyphRange = self.layoutManager.glyphRangeForTextContainer_(self.textContainer)
self.layoutManager.drawBackgroundForGlyphRange_atPoint_(glyphRange, topLeft)
self.layoutManager.drawGlyphsForGlyphRange_atPoint_(glyphRange, topLeft)
NSGraphicsContext.restoreGraphicsState()
Run Code Online (Sandbox Code Playgroud)
这一切都很好并且有效,但唯一的问题是它会产生看起来很糟糕的文本(虽然它是防腐蚀的).
这是CATextLayer版本:http://i39.tinypic.com/23h0h1d.png
这是NSLayoutManager版本:http://i40.tinypic.com/2vv9rw5.png
我缺少什么?
我有一个NSInvocationOperation,可以在后台下载并解析一系列NSXMLDocuments到我的UI响应.
我试图停止调用操作是调用我的NSOperationQueue的cancellAllOperations.但似乎这不会阻止调用的执行.
关于如何解决这个问题的任何想法?
我需要在用Python编写的应用程序中监听Mac上的全局鼠标事件(未绑定到应用程序).
我正在使用PyObjC,但我无法弄清楚如何做到这一点.简单的ObjC示例或其他Python技术也很受欢迎.
我的代码到目前为止:
from Quartz import *
def MyFunction(proxy, type, event):
print event
CGEventTapCreate(kCGHIDEventTap, kCGTailAppendEventTap, kCGEventTapOptionListenOnly, kCGEventLeftMouseDown, MyFunction)
Run Code Online (Sandbox Code Playgroud)
==分段错误
我知道我需要稍后将它添加到事件源中,但我需要首先使用它.
[更新]
使用PyObjC形式Macports解决了段错误,所以现在我写了这个:
from Quartz import *
def MyFunction(p, t, e, c):
print e
tap = CGEventTapCreate(kCGHIDEventTap, kCGHeadInsertEventTap, kCGEventTapOptionListenOnly, kCGEventLeftMouseDown, MyFunction, None)
runLoopSource = CFMachPortCreateRunLoopSource(None, tap, 0);
CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, kCFRunLoopDefaultMode);
CGEventTapEnable(tap, True);
CFRunLoopRun();
Run Code Online (Sandbox Code Playgroud)
但这只是永远运行而且不响应鼠标事件,有什么不对?
我想要一个使用我自己的CSS的小浏览器.问题是CSS没有加载,或者我想,它加载但没有任何影响.
这是完整的代码(我不使用Interface Builder):
import Foundation
import WebKit
import AppKit
import objc
def main():
app = AppKit.NSApplication.sharedApplication()
rect = Foundation.NSMakeRect(100,350,600,800)
win = AppKit.NSWindow.alloc()
win.initWithContentRect_styleMask_backing_defer_(rect, AppKit.NSTitledWindowMask | AppKit.NSClosableWindowMask | AppKit.NSResizableWindowMask | AppKit.NSMiniaturizableWindowMask, AppKit.NSBackingStoreBuffered, False)
win.display()
win.orderFrontRegardless()
webview = WebKit.WebView.alloc()
webview.initWithFrame_(rect)
webview.preferences().setUserStyleSheetEnabled_(objc.YES)
print webview.preferences().userStyleSheetEnabled()
cssurl = Foundation.NSURL.URLWithString_("http://dev.stanpol.ru/user.css")
webview.preferences().setUserStyleSheetLocation_(cssurl)
print webview.preferences().userStyleSheetLocation()
pageurl = Foundation.NSURL.URLWithString_("http://dev.stanpol.ru/index.html")
req = Foundation.NSURLRequest.requestWithURL_(pageurl)
webview.mainFrame().loadRequest_(req)
win.setContentView_(webview)
app.run()
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
代码运行没有错误.打印
True
http://dev.stanpol.ru/user.css
Run Code Online (Sandbox Code Playgroud)
但是我的CSS在WebView中没有任何影响.
我尝试了不同的解决方案,例如添加DOM链接:
pageurl = Foundation.NSURL.URLWithString_("http://dev.stanpol.ru/index.html")
req = Foundation.NSURLRequest.requestWithURL_(pageurl)
webview.mainFrame().loadRequest_(req)
dom = webview.mainFrame().DOMDocument()
link = dom.createElement_("link")
link.setAttribute_value_("rel", …Run Code Online (Sandbox Code Playgroud) pyobjc ×10
python ×8
cocoa ×7
objective-c ×3
xcode ×3
css ×1
isight ×1
macos ×1
mouseevent ×1
qtkit ×1
text ×1
web-services ×1
webkit ×1
xcode4 ×1