Как я могу легко создать диалог GUI с помощью сценария bash?

5

Мне нужно представить некоторый текст вместе с элементами (около 15 значений) для каждой из двух записей в списке Bash (файл). На том же экране мне нужно представить трехсторонний выбор (кнопки, прокручиваемое окно выбора и т. Д.).

Я - сценарий Ubuntu (11.04), который только начинает использовать Zenity в скриптах. Мои друзья предложили ЯД.

Могу ли я сделать все это в YAD или использовать неизвестный нам какой-либо другой удобный инструмент GUI?

.     

задан Harry 18.01.2013 в 16:12
источник

3 ответа

2

Вот очень минимальная реализация в Yad.

Текстовый файл с именем «mylist» в том же каталоге, что и скрипт, содержит «1 2 3 4 5 6 7 8 9 10». Символ пробела - это делит по умолчанию для ввода в списки.

Пример сценария:

#/bin/bash
thelist=$(<mylist)
thechoice=$(yad --title="Choose a value" --width=200 --height=200 --list --column="Values" --separator="" $thelist)
exit $(yad --title="You chose..." --text=$thechoice)

Вот и все. Прокрутка списка выполняется автоматически. --separator="" состоит в том, чтобы подавить Yad по умолчанию добавления символа канала ("|") к выходу.

Когда вы читаете страницу руководства, вы увидите, что у вас есть большой выбор возможностей. Вы можете добавлять кнопки, значки, переключатели и т. Д. Вы можете создавать диалоговые окна с вкладками, используя функцию Yad's Notebook, чтобы вставлять диалоги в другие диалоги в качестве плагинов.

Вот длинный пример в PCLinusOS mag и некоторые интересные более короткие примеры на Яд-сайт .

    
ответ дан chaskes 19.01.2013 в 06:03
2

для простых диалогов Yad или kdialog действительно наиболее функциональны. Полный GUI для bash, однако, может быть сделан только двумя программами, которые я знаю:

gtkdialog ( Ссылка ) предоставит вам полноценный интерфейс для отдельных программ и, вероятно, именно то, что вы ищете первое место, если яд окажется недостаточным для ваших нужд.

Другим является gtkserver ( Ссылка ), который является отдельным GUI-сервером. Ваше приложение bash может связываться с ним посредством труб, сообщений или TCP-сокетов, что весьма удобно, если вы планируете сложную настройку сценариев / приложений с одним центральным интерфейсом. Я думаю, что это будет немного лучше всего для вашего текущего проекта :-)

    
ответ дан thom 29.03.2013 в 22:09
1

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

Это создаст окно сообщения «Привет мир»:

zenity --info --text "Saluton mondo"

Это создаст список, заполненный выводом ls:

ls /var/log | zenity --list --column="Files and directories"
    
ответ дан Noe Nieto 29.11.2013 в 19:24