Элементы AppleScript GUI помимо диалога - PullRequest
1 голос
/ 30 августа 2010

Мне было интересно, есть ли способ в AppleScript создать своего рода небольшой апплет без необходимости использовать кучу диалогов, и я думаю, что в конечном итоге это будет лучше.

Вот сценарий, который у меня есть на данный момент, любезно предоставлен AppleScript Wikia

set x1 to text returned of (display dialog "What is X1?" default answer "")
set y1 to text returned of (display dialog "What is Y1?" default answer "")
set x2 to text returned of (display dialog "What is X2?" default answer "")
set y2 to text returned of (display dialog "What is Y2?" default answer "")
display dialog "Distance = " & ((x2 - x1) ^ 2 + (y2 - y1) ^ 2) ^ (1 / 2)

Теперь, очевидно, я понимаю этот скрипт, так как он довольно прост!

Но мне было интересно, если бы такой маленький апплет был немного более полезным и практичным, было бы лучше иметь какое-то окно, не загромождая пользователя кучей диалогов.

Есть ли способ, которым я могу создать своего рода окно с полями ввода и кнопкой "Рассчитать" или что-то в этом роде.

Или, на данном этапе, было бы лучше создать супер простое приложение Objective-C?

Ответы [ 2 ]

3 голосов
/ 30 августа 2010

Applescript предлагает только очень простое взаимодействие с пользователем изначально, помимо того, что вы там указали. Xcode включает поддержку для создания простых приложений с передней частью GUI и задней частью Applescript. New Project>Mac OS X>Application>Applescript Application. Документация ограничена, и на данный момент, если у вас есть какао, я бы предложил просто пойти по этому пути для облегчения долгосрочной поддержки.

1 голос
/ 31 августа 2010

Вы знаете, что вы можете сделать это в одном диалоговом окне вместо 4 ...

set theValues to text returned of (display dialog "Enter X1 Y1 X2 Y2 separated by a space." default answer "")
set {tids, text item delimiters} to {text item delimiters, space}
set {x1, y1, x2, y2} to text items of theValues
set text item delimiters to tids
display dialog "Distance = " & ((x2 - x1) ^ 2 + (y2 - y1) ^ 2) ^ (1 / 2)

Таким образом, вы просто вводите все значения одновременно с пробелом между каждым значением.Затем в коде вы разделяете его на ваши переменные.Если ваши значения всегда будут положительными, тогда вы можете просто получить «слова» значений, чтобы сделать его еще проще.Но я бы придерживался использования разделителей текстовых элементов на тот случай, если вы также захотите использовать отрицательные значения.Использование "words" удаляет символ "-" из чисел.

Если вы хотите по-настоящему поразить воображение, пользователь может поместить каждое значение в отдельную строку, как эта ...

set theValues to text returned of (display dialog "Enter X1 Y1 X2 Y2 on separate lines." default answer (return & return & return))
set {x1, y1, x2, y2} to paragraphs of theValues
display dialog "Distance = " & ((x2 - x1) ^ 2 + (y2 - y1) ^ 2) ^ (1 / 2)

ОБЪЯСНЕНИЕ РАЗДЕЛИТЕЛЕЙ ТЕКСТА : Вы можете преобразовать строку в список, получив «текстовые элементы» строки.Существует значение, называемое «разделители текстовых элементов» (tids), которое определяет, как эта строка разбивается на список.По умолчанию приливы "" (например, ничего).Например, посмотрите на этот скрипт ...

set theString to "some text words"
set theList to text items of theString
--> {"s", "o", "m", "e", " ", "t", "e", "x", "t", " ", "w", "o", "r", "d", "s"}

Список, который вы получаете, представляет собой каждый символ строки как отдельный элемент.Это потому, что tids является значением по умолчанию "".Теперь давайте посмотрим, что произойдет, если мы изменим приливы на что-то другое.Давайте вместо этого сделаем символ пробела и снова запустим скрипт ...

set theString to "some text words"
set text item delimiters to space
set theList to text items of theString
--> {"some", "text", "words"}

Делая это пробелом, строка разбивается на элементы, между которыми есть пробел.Итак, вы видите, что мы можем контролировать, как строка превращается в список, контролируя приливы.Стоит отметить одну вещь: когда мы изменяем приливы на значения, отличные от значения по умолчанию, после его использования мы должны изменить приливы обратно.Это безопасное программирование, потому что какая-то другая часть скрипта может зависеть от значения tids.Так что приобретайте привычку сбрасывать приливы после того, как закончите.Это основы того, что делает код tids.Он хранит начальное значение приливов (так что мы можем изменить его позже), изменяет приливы на пробелы, использует приливы, чтобы превратить строку в список, а затем сбрасывает приливы к первоначальному значению.

Я надеюсьэто помогает.

...