При использовании py2app есть ли способ настроить отображаемый диалог трассировки? (Или показать другой диалог Какао?)

Есть ли простой способ получить больше контроля над диалогами трассировки py2app или просто хороший способ отображения сообщений графического интерфейса?

Если я создаю исключение в своем сценарии py2app, я получаю диалоговое окно, в котором говорится что-то вроде этого:

Ошибка имени приложения

Ошибка имени моего приложения

Произошла непредвиденная ошибка во время выполнения основного скрипта

MyRaisedError: это текст, которым я могу управлять, когда вызываю ошибку.

В нем есть кнопки Открыть консоль и Завершить. Мой сценарий должен проверить, находится ли определенный DVD в приводе, если нет, я хочу показать диалоговое окно с ошибкой и выйти. Я хотел бы иметь больше контроля над этим, чем это, так как я могу изменить только часть текста и не могу управлять кнопками.

Я попытался вызвать osascript для «отображения диалогового окна» через applescript, но это дало мне такую ​​​​ошибку: 0:19: ошибка выполнения: взаимодействие с пользователем не разрешено. (-1713) Мне не особенно нравится такой способ, но если это все, что я могу сделать...

Я действительно предпочел бы не включать большой проект, такой как Cocoa Dialogs или что-то вроде проекта PyObjC... script сам по себе очень крошечный, и я не вижу смысла добавлять в 10 раз больше моего сценария только для того, чтобы получить диалог.


person zekel    schedule 16.12.2009    source источник


Ответы (2)


Вместо использования osascript вы можете вызвать display dialog через py-appscript который, если его еще нет в вашей библиотеке сайта 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()
person Ned Deily    schedule 16.12.2009
comment
Как лучше всего включить это в пакет py2app? Я не хочу, чтобы людям, использующим мое приложение, приходилось его устанавливать. - person zekel; 17.12.2009
comment
Импортировав его в свой скрипт, py2app должен автоматически включаться в комплект вашего приложения. Вам не нужно делать ничего особенного. - person Ned Deily; 17.12.2009
comment
Чтобы уточнить, py2app не обязательно будет делать это, если вы используете стандартный питон, поставляемый Apple. Для автономного приложения, которое вы собираетесь распространять и с которым вы, возможно, захотите работать на нескольких уровнях OS X, вы, вероятно, захотите использовать python python.org. - person Ned Deily; 17.12.2009
comment
Это будет работать только на 10.6 (правда!) То, как оно автоматически связывает импортированные вещи, действительно жутко, но потрясающе. Я не могу найти файлы osax нигде в собранном пакете... - person zekel; 17.12.2009

Просто поместите стандартный блок Python try/catch вокруг раздела кода, который вызывает исключение, а затем используйте NSAlert, чтобы сообщить своим пользователям, что им нужно вставить DVD.

person RyanWilcox    schedule 17.12.2009
comment
Откуда NSAlert? - person zekel; 17.12.2009