Je souhaite utiliser un NSOpenPanel pour une application que je suis en train de concevoir. Voici ce que j'ai jusqu'à présent :
@objc.IBAction
def ShowOpenPanel_(self, sender):
self.panel = NSOpenPanel.openPanel()
self.panel.setCanChooseFiles_(False)
self.panel.setCanChooseDirectories_(True)
NSLog(u'Starting OpenPanel')
self.panel.beginForDirectory_file_types_modelessDelegate_didEndSelector_contextInfo_(
self.defaults.objectForKey_(u'projpath'),
objc.nil,
objc.nil,
self,
objc.selector(self.OpenPanelDidEnd_returnCode_contextInfo_,
signature='v:@ii'),
objc.nil)
NSLog(u'OpenPanel was started.')
def OpenPanelDidEnd_returnCode_contextInfo_(self, panel, returnCode, context):
NSLog('Panel ended.')
if (returnCode == NSOKButton):
NSLog(u'User selected OK')
path = self.panel.filenames()[0]
self.defaults.setObject_forKey_(path, u'projpath')
del self.panel
Les deux principales lignes qui me préoccupent sont les suivantes :
objc.selector(self.OpenPanelDidEnd_returnCode_contextInfo_,
signature='v:@ii'),
objc.nil) #this is the argument that gets passed as the void pointer
Le troisième argument est censé être un pointeur void. Comme je n'ai pas l'intention d'utiliser ces données, je préfère le laisser vide. J'ai essayé de rendre la signature 'v:@iv'
et j'ai essayé d'utiliser objc.NULL
et de python None
et à peu près toutes les combinaisons de toutes ces choses. Quelle est la meilleure façon de gérer cela ?