首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyobjC : NSTextField on NSPopover

PyobjC : NSTextField on NSPopover
EN

Stack Overflow用户
提问于 2014-07-29 10:13:46
回答 1查看 510关注 0票数 0

我在这里提到了同样的问题:Not being able to edit NSTextField on NSPopover even though Editable behavior is set。解决方案似乎是覆盖canBecomeKeyWindow of NSWindow。我试图在PyObjC中做同样的事情,但是我得到了一个错误Python signature doesn't match implied objective-C signature

在下面的代码中,如果我注释掉了canBecomeKeyWindow_(),那么应用程序就会按预期运行,但是我无法单击和编辑文本字段。

代码语言:javascript
复制
# from Cocoa import *
from AppKit import NSWindowController, NSApplication, NSApp, NSMaxYEdge, NSImage, NSStatusBar, NSMenu, NSMenuItem, NSVariableStatusItemLength, NSRect
from Cocoa import objc

from Foundation import NSUserNotification, NSUserNotificationCenter, NSObject
from PyObjCTools import AppHelper
import webbrowser
import subprocess
import os
global popover


class TestApp(NSApplication):

    def finishLaunching(self):
        # Make statusbar item
        statusbar = NSStatusBar.systemStatusBar()
        self.statusitem = statusbar.statusItemWithLength_(NSVariableStatusItemLength)
        self.icon = NSImage.alloc().initByReferencingFile_('app-icon.png')
        self.icon.setScalesWhenResized_(True)
        self.icon.setSize_((20, 20))
        self.statusitem.setImage_(self.icon)
        self.statusitem.setHighlightMode_(1)
                # make the menu
        self.menubarMenu = NSMenu.alloc().init()
        self.menuItem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('Login', 'loginCallback:', '')
        self.menubarMenu.addItem_(self.menuItem)

        self.quit = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('Quit', 'terminate:', '')
        self.menubarMenu.addItem_(self.quit)

        # add menu to statusitem
        self.statusitem.setMenu_(self.menubarMenu)

    def loginCallback_(self, notification):
        # Initiate the contrller with a XIB
        viewController = SimpleXibDemoController.alloc().initWithWindowNibName_("Login")

        # Show the window
        viewController.showWindow_(viewController)
        rect = self.statusitem.valueForKey_('button').frame()
        viewController.popover.showRelativeToRect_ofView_preferredEdge_(rect, self.statusitem.valueForKey_('button'), NSMaxYEdge)


class SimpleXibDemoController(NSWindowController):
    popover = objc.IBOutlet()
    counterTextField = objc.IBOutlet()
    username_field = objc.IBOutlet()
    password_field = objc.IBOutlet()
    submit_button = objc.IBOutlet()

    def canBecomeKeyWindow_(self):
        return 1

    def windowDidLoad(self):
        NSWindowController.windowDidLoad(self)

    @objc.IBAction
    def submit_(self, sender):
        username = self.username_field.stringValue()
        password = self.password_field.stringValue()
        self.updateDisplay(username + ' ' + password)

    def updateDisplay(self, value):
        self.counterTextField.setStringValue_(value)

if __name__ == "__main__":
    app = TestApp.sharedApplication()
    icon = NSImage.alloc().initByReferencingFile_('app-icon.png')
    app.setApplicationIconImage_(icon)
    AppHelper.runEventLoop()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-21 14:34:24

看起来,您在不应该添加下划线的地方添加了下划线。PyObjC桥将将其转换为冒号。除此之外,相应的Python布尔值应该是True。因此,正确的函数如下所示:

代码语言:javascript
复制
def canBecomeKeyWindow(self):
    return True
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25012935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档