2017-04-18 21 views
0

Ich versuche, die PyObjC Bindungen für ImageCaptureCore zu testen, und ich bin nicht in der Lage meiner Delegierten Rückrufe zu bekommen gar Feuer:Mit ImageCaptureCore mit PyObjC

 
"""ImageCaptureCore test app.""" 

from __future__ import (
    absolute_import, 
    division, 
    print_function, 
) 

import time 

import objc 
from AppKit import NSObject 
from ImageCaptureCore import (
    ICCameraDevice, 
    ICDeviceBrowser, 
    ICDeviceLocationTypeMaskLocal, 
    ICDeviceTypeMaskCamera, 
) 

class ICDelegate(NSObject): 
    """Implements ICDeviceBrowserDelegate.""" 

    def __new__(cls): 
     """Create a new `ICDelegate`.""" 
     return ICDelegate.alloc().init() 

    def init(self): 
     self = objc.super(ICDelegate, self).init() 
     if self is None: 
      return None 
     self.devicesFetched = False 
     print("Delegate initialized.") 
     return self 

    # ICDeviceBrowserDelegate callbacks 
    def deviceBrowserDidEnumerateLocalDevices_(self, browser): 
     print("Done fetching devices.") 
     self.devicesFetched = True 

    def deviceBrowser_didAddDevice_moreComing_(self, browser, device, moreComing): 
     print("Device added.") 

    def deviceBrowser_didRemoveDevice_moreGoing_(self, browser, device, moreGoing): 
     print("Device removed.") 

delegate = ICDelegate() 
browser = ICDeviceBrowser.alloc().init() 

browser.setDelegate_(delegate) 
browser.setBrowsedDeviceTypeMask_(ICDeviceTypeMaskCamera | ICDeviceLocationTypeMaskLocal) 

browser.start() 
print("Fetching cameras...") 
while not delegate.devicesFetched: 
    time.sleep(1) 
    print("Still fetching cameras...") 
    # We never get past this! 

Von meinem Verständnis des API, Ich sollte die didEnumerateLocalDevices Rückruf erhalten, sobald die ICDeviceBrowser hat eine Liste von Geräten (auch wenn keine Geräte eingesteckt sind) fertig, und ich sollte eine didAddDevice für jedes angeschlossene Gerät erhalten. Ich erhalte stattdessen nichts (unabhängig davon, ob ich stecke in einem Gerät oder nicht, entweder vor oder nach dem ich mein Skript zu starten, ich habe auch ein iPhone, eine normale USB-Kamera versucht):

 
Delegate initialized. 
Fetching cameras... 
Still fetching cameras... 
Still fetching cameras... 
Still fetching cameras... 
Still fetching cameras... 

Gibt es ein andere Art von Setup, die passieren müssen, um ICDeviceBrowser zu beginnen, um zu arbeiten? Ich habe mir die nativen OBJC-Beispiele angeschaut und es sieht aussieht wie ich über die gleiche Sache mache, aber ich konnte keine Beispiele für die Pyobjc-Bindung finden, denen ich folgen kann.

Antwort

0

Dies ist die silberne Kugel, die in der while-Schleife gehen muss:

while True: 
    NSRunLoop.currentRunLoop().runUntilDate_(NSDate.dateWithTimeIntervalSinceNow_(0.1)) 
Verwandte Themen