在PyObjC中,如何在使用runModalForWindow_后结束工作表?

时间:2010-02-13 22:39:30

标签: python cocoa pyobjc

我有一个辅助窗口(工作表),用于由secondard WindowController控制的对话框。出于某种原因,在显示工作表之后,操作永远不会在NSObject子类中调用。我已经确认并重新联系了这些行动。代码运行runModalForWindow_但后来从未收到ok或cancel操作。这张纸永远不会消失。我在这里错过了什么?我似乎无法在他们的网站上找到任何执行runModalForWindow _...

的pyobjc示例
    @objc.IBAction
def okSelected(self, sender):
    self.dialogResult = objc.YES
    NSLog("OK")
    #NSApp.endSheet_(self.newTurnWindowOutlet)
    NSApp.stopModalWithCode_(objc.OK)

@objc.IBAction
def cancelSelected(self, sender):
    self.dialogResult = objc.NO
    #NSApp.endSheet_(self.newTurnWindowOutlet)
    NSApp.stopModalWithCode_(objc.NO)

def runSheet(self, parent):
    NSApp.beginSheet_modalForWindow_modalDelegate_didEndSelector_contextInfo_(
        self.newTurnWindowOutlet, parent, None, 
        self.sheetDidEnd_returnCode_contextInfo_, None)
    NSLog("runModelForWindow")
    result = NSApp.runModalForWindow_(self.newTurnWindowOutlet)
    NSLog(str(result))
    NSApp.endSheet_(self.newTurnWindowOutlet)
    self.newTurnWindowOutlet.orderOut_(self)
    return self.dialogResult

1 个答案:

答案 0 :(得分:2)

你的行

    @objc.IBAction
    def okSelected(self, sender):

应该是

    @objc.IBAction
    def okSelected_(self, sender):

等。请记住,Objective-C选择器中的每个冒号都变为Python中的_!