【问题标题】:When using py2app, is there a way to customize the traceback dialog that gets displayed? (Or show a different Cocoa dialog?)使用 py2app 时,有没有办法自定义显示的回溯对话框? (或者显示不同的 Cocoa 对话框?)
【发布时间】:2009-12-16 21:11:24
【问题描述】:

是否有一种简单的方法可以进一步控制 py2app 回溯对话框,或者只是一种显示 GUI 消息的好方法?

如果我在我的 py2app 脚本中引发异常,我会得到一个对话框,内容如下:

MyAppName 错误

MyAppName 错误

主脚本执行过程中出现意外错误

MyRaisedError:这是我在引发错误时可以控制的文本。

它有 Open ConsoleTerminate 按钮。我的脚本需要检查驱动器中是否有某个 DVD,如果不是,我想显示一个错误对话框并退出。我希望对它有更多的控制权,因为我只能更改部分文本而无法控制按钮。

我尝试通过 applescript 调用 osascript 来执行“显示对话框”,但它给了我这样的错误:0:19:执行错误:不允许用户交互。 (-1713) 我不是特别喜欢这种方式,但如果我能做到的话……

我真的不想包含像 Cocoa Dialogs 这样的大项目或 PyObjC 项目之类的东西......脚本本身非常小,我看不到添加 10 倍的脚本内容只是为了获得对话框.

【问题讨论】:

    标签: python macos py2app


    【解决方案1】:

    您可以通过py-appscript 调用display dialog,而不是使用osascript,如果您的python 站点库中还没有它,可以通过easy_install 安装它。此示例在 py2app 生成的应用程序中运行:

    #!/usr/bin/env python
    from osax import *
    import py2app
    
    def doit():
        sa = OSAX()
        sa.display_dialog("Python says hello!",
                buttons=["Hi!", "Howdy!", "Duuuude!"],
                default_button=3)
    
    if __name__ == '__main__':
        doit()
    

    【讨论】:

    • 将它包含在 py2app 包中的最佳方式是什么?我不希望使用我的应用的人必须安装它。
    • 通过在脚本中导入它,py2app 应该会自动包含在您的应用程序包中。你不必做任何特别的事情。
    • 澄清一下,如果您使用 Apple 提供的默认 python,py2app 不一定会这样做。对于您要分发的独立应用程序,并且您可能希望在多个级别的 OS X 上工作,您可能希望使用 python.org python。
    • 这只会在 10.6 上运行(真的!)它自动捆绑导入的东西的方式确实令人毛骨悚然,但很棒。我在构建包的任何地方都找不到 osax 文件...
    【解决方案2】:

    只需在引发异常的代码部分周围放置一个标准 Python try/catch 块,然后使用 NSAlert 告诉您的用户他们需要放入 DVD

    【讨论】:

    • NSAlert 是从哪里来的?
    猜你喜欢
    • 1970-01-01
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多