使用Activity Monitor/Instruments/Shark进行采样将显示Python解释器中充满C函数的堆栈跟踪.我会帮助您查看相应的Python符号名称.是否有一些可以做到这一点的DTrace魔法?Python的cProfile模块可用于分析Python调用的各个子树,但不是用于了解整个应用程序响应用户事件的情况.
Python有很多GUI库:tkinter,wxWidgets,pyGTK等.但是所有这些GUI都需要安装并且非常重量级,因此部署最终用户GUI python应用程序会在提到的GUI库上进行中继时有点复杂.
最近,我考虑过python的内置ctypes模块.从理论上讲,可以创建一个纯的python GUI库,用于ctypesWindows(windll.user32.CreateWindowEx等),MacOS上的原生pyObjC和gnome/kde上的pyGTK/pyQt.这样的图书馆存在吗?如果没有,你认为这个想法有什么问题?
在xcode 3.2下,我的ObjectiveC + Python/Ruby项目仍然可以打开更新和编译,但是你无法创建新项目.
鉴于xcode 3.2中缺少ruby和python的所有痕迹(即创建项目并添加新的ruby/python文件),是否有一种简单的方法可以再次安装模板?
我发现了一些关于将它们复制到某个文件夹的信息,但我似乎无法让它工作,我怀疑文件夹的位置已经改变为3.2.
我正在尝试在10.5上部署一个在Xcode 3.2.X(Snow Leopard)上开发的PyObjC(或Cocoa-Python)应用程序,它在10.6系统上运行得非常好.
该应用程序不会在10.5上启动;它会在启动时崩溃,并显示此错误消息(在崩溃报告中找到):
Dyld错误消息:未加载库:/System/Library/Frameworks/Python.framework/Versions/2.6/Python引用自:/Users/myuser/Files/myApp.app/Constate/Mark/myApp原因:未找到图像
似乎在某处Xcode硬编码Versions/2.6 python框架路径(而不是将其设置为Versions/Current,例如).
但是,我无法找到可以修改此链接路径的位置以设置为当前(或2.5,可能是有条件的)...
我正在尝试使用以下python代码将元数据写入pdf文件:
from Foundation import *
from Quartz import *
url = NSURL.fileURLWithPath_("test.pdf")
pdfdoc = PDFDocument.alloc().initWithURL_(url)
assert pdfdoc, "failed to create document"
print "reading pdf file"
attrs = {}
attrs[PDFDocumentTitleAttribute] = "THIS IS THE TITLE"
attrs[PDFDocumentAuthorAttribute] = "A. Author and B. Author"
PDFDocumentTitleAttribute = "test"
pdfdoc.setDocumentAttributes_(attrs)
pdfdoc.writeToFile_("mynewfile.pdf")
print "pdf made"
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常(安慰没有错误),但是当我检查文件的元数据时,它如下:
PdfID0:
242b7e252f1d3fdd89b35751b3f72d3
PdfID1:
242b7e252f1d3fdd89b35751b3f72d3
NumberOfPages: 4
Run Code Online (Sandbox Code Playgroud)
原始文件具有以下元数据:
InfoKey: Creator
InfoValue: PScript5.dll Version 5.2.2
InfoKey: Title
InfoValue: Microsoft Word - PROGRESS ON THE GABION HOUSE Compressed.doc
InfoKey: Producer
InfoValue: GPL Ghostscript …Run Code Online (Sandbox Code Playgroud) 我正在编写一个小型的跨平台wxPython应用程序,但是在每个平台上我都需要使用一些特定于平台的API.在Mac OS上,可以使用PyObjC完成.
我正在寻找有关如何使用PyObjC的教程.但是,到目前为止我发现的只是Xcode的教程.我希望我的应用程序能够在mac/win/lin上运行,无需更改,我不想在Xcode中开发它.有办法吗?
UPD.更具体地说,我需要从Mac OS X访问一些笔平板电脑事件,我想使用PyObjC(我没有看到任何其他方式).
我正在编写一个 wxPython 应用程序,该应用程序在关闭所有窗口后仍保持打开状态 - 因此您仍然可以将新文件拖放到 OSX 停靠栏图标上(我使用myApp.SetExitOnFrameDelete(False))。
不幸的是,如果我关闭所有窗口,OSX 菜单栏将只包含一个“帮助”菜单。我想至少添加一个文件/打开菜单项,或者只保留主窗口的菜单栏。这在 wxPython 中以某种方式可能吗?
事实上,我也会对非 wxPython hack 感到满意(例如,在 pyobjc 中设置菜单,但在 wxPython 中运行其余的 GUI)。无论如何,OSX 中的 wxPython 开发都是一种黑客攻击;)
更新:我设法使用 Lyndsey Ferguson 的提示解决了这个问题。这是我所做的:
(-10000,-10000)使其不会在屏幕上闪烁(啊,多么肮脏的黑客!)是的,这真的很丑……如果有人提出更漂亮的解决方案,我将不胜感激。
更新2:实际上它可以用更简单的方式解决:如果我们不关闭最后一个窗口,只需隐藏它。并确保它不再响应菜单事件。
我正在使用 Xcode 4.6.2 构建一个 PyObjC 应用程序,并试图弄清楚如何将 Python 框架与我的应用程序捆绑在一起,以便我可以引用它,而不依赖于具有特定 Python 版本的主机系统。
(我之前问过这个问题,但从那时起,我决定嵌入框架是更好的方法。)
我知道这是人们所做的事情——根据我的经验,大多数独立的 Python 应用程序都会在其中打包 Python 安装。但我不知道如何让它为我工作。
我已使用构建阶段“复制文件”面板将 Python.framework 复制到我的项目中,并且 Python.framework确实显示在我的应用程序包中,但我不知道如何让应用程序引用它。
如果我在 Xcode 中的“链接的框架和库”中链接到 Python.framework,该应用程序会正确构建,但在 10.6 上启动时失败,并出现错误
Dyld Error Message:
Library not loaded: /System/Library/Frameworks/Python.framework/Versions/2.7/Python
Referenced from: {/path/to/my/app}
Reason: image not found
Run Code Online (Sandbox Code Playgroud)
...因为 10.6 只有 Python 2.5,并且它正在搜索系统框架,而不是我的应用程序包中包含的框架。
如果我不链接到 Xcode 中的 Python 框架,应用程序将无法构建。
那么,我如何告诉我的应用程序我希望它使用捆绑在我的应用程序中的 Python.framework appname.app/Contents/Frameworks/Python.framework,而不是位于 的系统 Python.framework /System/Library/Frameworks/Python.framework?
我在这个问题上陷入了僵局,任何帮助将不胜感激。
我创建了一个应用程序,用于pyobjc监视我正在使用的当前应用程序或当前 URL(如果正在使用 Safari/Chrome)。我使用以下方式获得最前面的应用程序:
active_app_name = NSWorkspace.sharedWorkspace().frontmostApplication().localizedName()
Run Code Online (Sandbox Code Playgroud)
它在每秒检索信息的循环中运行。然而,考虑到我可能会丢失信息超过 30 秒,这个解决方案似乎效率很低。
我想知道是否有使用事件的解决方案,即有一个观察者在当前最前面的应用程序发生变化时进行侦听。
我找到了这个答案Mac OS X - How to Monitor a window change event? ,但有两个问题:1.我只需要有关应用程序的信息,而不需要有关特定窗口的信息,2.我不知道如何将这些消息转换为Python代码。
AppleScript 解决方案是合适的,因为我可以使用osascript.
谢谢!
我想在 OS X (10.11) 上使用 Python 连接到 Wi-Fi 网络。基于CWInterface 参考,我发现有一种iface.associateToNetwork_password_error_()方法可用,但是在调用时它不会连接到网络,也不会导致任何异常。
同时iface.disassociate()正常工作并断开WiFi。
这是我试过的代码:
import objc
objc.loadBundle('CoreWLAN',
bundle_path='/System/Library/Frameworks/CoreWLAN.framework',
module_globals=globals())
iface = CWInterface.interface()
iface.associateToNetwork_password_error_(SSID, PASSWORD, None)
Run Code Online (Sandbox Code Playgroud)
如何从 OS X 上的 Python 连接到指定网络并确保已建立连接?