【问题标题】:Behaviour of NSAlert with runModalNSAlert 与 runModal 的行为
【发布时间】:2014-08-05 13:55:20
【问题描述】:

我是 osx 编程的新手。我正在使用 pyobjc 创建警报。我对模态窗口或对话框的理解是,模态窗口需要用户进行操作才能继续。但是,如果我使用 NSAlert 的 runModal,我仍然可以在仍然显示警报时转到其他应用程序。我对模态对话框的理解不正确吗?

class Alert(object):

    def __init__(self, messageText):
        super(Alert, self).__init__()
        self.messageText = messageText
        self.informativeText = ""
        self.buttons = []

    def displayAlert(self):
        alert = NSAlert.alloc().init()
        alert.setMessageText_(self.messageText)
        alert.setInformativeText_(self.informativeText)
        # alert.setAlertStyle_(NSInformationalAlertStyle)
        alert.setAlertStyle_(NSCriticalAlertStyle)
        for button in self.buttons:
            alert.addButtonWithTitle_(button)
        NSApp.activateIgnoringOtherApps_(True)
        self.buttonPressed = alert.runModal()


def alert(message="Default Message", info_text="", buttons=["OK"]):
    ap = Alert(message)
    ap.informativeText = info_text
    ap.buttons = buttons
    ap.displayAlert()
    return ap.buttonPressed

【问题讨论】:

    标签: objective-c macos pyobjc nsalert


    【解决方案1】:

    如果模态对话框是 system 模态对话框,您将无法切换到任何其他应用程序。对于您的应用,它会阻止您在自己应用的用户界面中继续进行,而不是在其他应用中。

    就您的代码而言,您正在创建一个应用程序模式对话框,如NSAlert 文档中所述。

    【讨论】:

    • 谢谢!有没有办法在 OSX 中创建系统级模式对话框,最好使用 PyObjC?
    • 我不知道任何事情,因为这不是我尝试做的事情。系统模式对话框对用户非常不利。为什么要对其他用户施加这样的影响?
    • 不幸的是,这是要求。我很确定有办法做到这一点,因为它在 Mac 应用程序中用于 Box 同步。
    • 我在盒子应用程序中没有看到任何证据表明它阻止了切换到其他应用程序。我所看到的是 regular 窗口的“始终处于顶部”的行为。这可以通过使用窗口的 setLevel 调用设置级别来实现NSStatusWindowLevel。不过,这不是您可以使用NSAlert API 完成的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    相关资源
    最近更新 更多