1

アウトレットの参照に問題があるようです。ようやくドラッグ アンド ドロップが機能するようになりました (stackoverflow メンバーの助けを借りて) が、このアウトレットを機能させることができません。

class controller(NSWindow):


    form_file = IBOutlet()
    mainWindow = IBOutlet()


    #drag and drop ability
    def awakeFromNib(self):
        self.registerForDraggedTypes_([NSFilenamesPboardType, None])
        print 'registerd drag type'


    def draggingEntered_(self, sender):
        print 'dragging entered'
        pboard = sender.draggingPasteboard()
        types = pboard.types()
        opType = NSDragOperationNone
        if NSFilenamesPboardType in types:
            opType = NSDragOperationCopy
        return opType


    def performDragOperation_(self, sender):
        print 'preform drag operation'
        pboard = sender.draggingPasteboard()
        successful = False
        if NSFilenamesPboardType in pboard.types():
            fileAStr = pboard.propertyListForType_(NSFilenamesPboardType)[0].encode('utf-8')
            successful = True

        #edit some things
        print type(fileAStr)
        self.form_file.setStringValue_(fileAStr)
        return successful

ファイルをドロップできますがform_file、関数内からアウトレットを参照できませんperformDragOperation。ドロップしたファイルの URL で NSTextField を更新したいのですが、NoneTypeエラーが返されます。

(reason '<type 'exceptions.TypeError'>: 'NoneType' object is not callable') was raised     during a dragging session

エラーをキャッチしようとしていたので、awakeFromNib関数に次を追加しました

    print type(self.formfile)
    print type(self.mainWindow)
    NSLog("formfile = %p", self.formfile)
    NSLog("mainWindow = %p", self.mainWindow)
    NSLog("self = %p", self)
    print self

これは次のように返されます:

registerd drag type
<type 'NoneType'>
<type 'NoneType'>
2013-01-12 16:32:29.211 app [463:303] formfile = 0x10013c148
2013-01-12 16:32:29.212 app[463:303] mainWindow = 0x10013c148
2013-01-12 16:32:29.212 app[463:303] self = 0x105aba890
<controller: 0x1008a1600>
registerd drag type
<objective-c class NSTextField at 0x7fff785296e8>
<objective-c class controller at 0x10541b6a0>
2013-01-12 16:32:29.216 app[463:303] formfile = 0x105abaa10
2013-01-12 16:32:29.216 app[463:303] mainWindow = 0x105abaa10
2013-01-12 16:32:29.216 app[463:303] self = 0x105aba890
<controller: 0x1008afe00>

しかし、dragEntered 関数で同じテストを行うと、1 つのコントローラーとオブジェクト ( NoneType1 つ) しか得られません。問題は、awakeFromNib メソッドを 2 回実行していることです。私のxibファイルの問題かもしれないと思ったのですが、調べてみたところ、問題がわかりません。

何か案は、

トム

4

1 に答える 1

0

私は Python に慣れていないので、私の提案がうまくいくかもしれないし、うまくいかないかもしれません…</p>

Python にクラスがあり、ファイルがサブクラスである場合は、 でスーパークラスを呼び出してみてくださいawakeFromNib

于 2013-01-17T21:37:34.243 に答える