Как отмечает elv, beginSheetForDirectory:file:modalForWindow:modalDelegate:didEndSelector:contextInfo:
устарела в 10.6, и новый метод для использования - beginSheetModalForWindow:completionHandler:
Нет метаданных для этого метода в версии PyObjC, поставляемой со Snow Leopard, но с тех пор он был добавлен,и вы можете обновить соответствующий файл самостоятельно, чтобы использовать этот метод.Откройте /System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/PyObjC/AppKit/PyObjC.bridgesupport и найдите в нем элемент:
<class name='NSSavePanel'>
, добавьте следующее:
<method selector='beginSheetModalForWindow:completionHandler:'>
<arg index='1' block='true' >
<retval type='v' />
<arg type='i' type64='q' />
</arg>
</method>
<method selector='beginWithCompletionHandler:'>
<arg index='0' block='true' >
<retval type='v' />
<arg type='i' type64='q' />
</arg>
</method>
Это метаданные, которые нужны стороне Python для получения и возврата правильных типов объектов в Objective-C.Вы можете передать любой вызываемый объект для обработчика завершения, если он имеет правильную подпись (то есть принимает целочисленный аргумент и ничего не возвращает).Пример:
def showOpenPanel_(self, sender):
openPanel = NSOpenPanel.openPanel()
def openPanelDidClose_(result):
if result == NSFileHandlingPanelOKButton:
openPanel.orderOut_(self)
image = NSImage.alloc().initWithContentsOfFile_(openPanel.filename())
self.imgView.setImage_(image)
openPanel.setAllowedFileTypes_(NSImage.imageFileTypes())
openPanel.beginSheetModalForWindow_completionHandler_(self.imgView.window(),
objc.selector(openPanelDidClose_, argumentTypes='l'))