Рубрика:
Программирование /
Анализ данных
|
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|
АНДРЕЙ УВАРОВ
Взаимодействие shell-скриптов с пользователем посредством Zenity
В данной статье речь пойдёт о том, каким образом можно без особых усилий сделать графический интерфейс к shell-скриптам. Если вы хотите сделать взаимодействие ваших программ с пользователем более простым, то эта статья для вас, и не важно, какой язык вы используете, будь то bash, perl, python и т. п.
Итак, Zenity является утилитой отображения диалогов. Программа имеется в составе большинства распостранённых дистрибутивов Linux, хотя ее можно скомпилировать или найти уже в бинарном виде практически для любой *nix-системы.
Взаимодействие с X-сервером производится с помощью библиотеки GTK+.
Рассмотрим функциональные возможности данной программы. Имеется десять видов диалогов.
- Calendar – календарь (date-picker).
- Entry – однострочное текстовое поле ввода.
- Text-info – диалог отображения многострочной текстовой информации, который может применяться и как поле ввода. Хотя, по всей видимости, это не является его основным назначением.
- Error – сообщение об ошибке.
- Info – сообщение общего характера.
- Warning – предупреждение.
- Question – вопросительное сообщение с возможностью ввода утвердительного или отрицательного ответа.
- File-selection – выбор файла.
- List – список с возможностью выбора и редактирования его элементов.
- Progress – Progress bar dialog. Отображает статус выполнения текущей операции.
Заставить утилиту делать то, что мы пожелаем, можно посредством запуска программы с соответствующими параметрами. Имя любого из параметров состоит более чем из одного символа и, следовательно, имеет префикс «--» – «два минуса». При завершении выполнения будут выведены результирующие данные в stdout или же код будет просто возвращён в stderr. Например, чтобы отобразить сообщение об ошибке, достаточно выполнить следующее:
# zenity --error
В результате мы увидим сообщение об ошибке:
Все диалоги имеют некоторые свойства, значения которых также определяются параметрами запуска. Общие для всех диалогов свойства, то есть те, которыми обладают все диалоги, такие: title, window-icon, width, height. Очевидно, что title определяет заголовок окна, window-icon – пиктограмму, а width и height – ширину и высоту окна соответственно.
Теперь можно поговорить о каждом из диалогов подробнее.
Info, question, warning и error
Text – выводимое сообщение. Различаются данные диалоги лишь пиктограммой, находящейся напротив сообщения. Question имеет две кнопки, соответствующие положительному и отрицательному ответу на сообщение.
Calendar
- Text – сообщение, выводимое над полем выбора даты.
- Day, month и year – день, месяц и год, которые будут установлены по умолчанию.
- Date-format – строка, определяющая формат возвращаемой даты. Формат строки эквивалентен формату вызова функции strftime.
Попробуем написать простое приложение, запрашивающее дату рождения пользователя.
Файл birthdate.pl:
#! /usr/local/bin/perl
do
print `zenity --info --text "You may not enter real birth date" --title=birthday`;
while(!($birthdate = `zenity --calendar --date-format=%d.%m.%y`));
`zenity --info --text "Your birth date is $birthdate" --title "Your Bitrh Date"`;
Entry
- Text – сообщение, выводимое над полем ввода.
- Entry-text – текст, которым автоматически заполняется поле ввода.
- Hide-text – если присутствует, то вводимые символы отображаются «звёздочками».
В качестве примера попробуем написать простое приложение, осуществляющее запуск вводимой команды.
Файл command.sh:
#! /bin/sh
```zenity --entry --title "Run command" --text "Command:```
List
- Column – заголовок столбца.
- Check-list – использование check box для первого столбца.
- Radio-list – использование radio buttons для первого столбца.
- Separator – разделитель, использующийся при выводе информации. По умолчанию это символ «|».
- Editable – присутствие данного параметра означает, что пользователь может редактировать элементы списка.
Text-info
- File-name – имя файла, содержимое которого будет отображено.
- Editable – использование данного параметра аналогично List.
File-selection
- File-name – имя файла, устанавливаемое по умолчанию.
- Multiple – возможность выбора сразу нескольких файлов.
- Separator – использование данного параметра аналогично List.
Progress
- Text – сообщение над progress bar.
- Percentage – начальное состояние, указываемое в процентах.
- Auto-close – автоматическое закрытие диалога после достижения 100%.
- Pulsate – определяет отображение «пульсирующего» прогресса.
Кроме того, Zenity имеет ещё несколько менее важных дополнительных опций.
- --gdk-debug=FLAGS – установка флагов отладки Gdk;
- --gdk-no-debug=FLAGS – отмена флагов отладки Gdk;
- --display=DISPLAY;
- --sync – использование синхронных X-вызовов;
- --name=NAME – имя программы, используемое оконным менеджером;
- --class=CLASS – класс программы, используемый оконным менеджером;
- --gxid-host=HOST;
- --gxid-port=PORT;
- --gtk-debug=FLAGS – установка флагов отладки Gtk+;
- --gtk-no-debug=FLAGS – отмена флагов отладки Gtk+;
- --g-fatal-warnings – все предупреждения приводят к завершению выполнения;
- --gtk-module=MODULE – загрузить дополнительный модуль Gtk.
Кроме Zenity, есть ещё такие средства, как xdialog, dialog, kdialog, xmessage. Рассмотрим вкратце некоторые из них.
Dialog – программа, использующая Ncurses для вывода диалогов. Вследствие этого является достаточно универсальной, так как не все и не всегда пользуются X-Window. Вот список параметров dialog:
- --yesno <text> <height> <width>
- --msgbox <text> <height> <width>
- --prgbox «<command line>» <height> <width>
- --infobox <text> <height> <width>
- --inputbox <text> <height> <width> [<init string>]
- --textbox <file> <height> <width>
- --menu <text> <height> <width> <menu height> <tag1> <item1>...
- --checklist <text> <height> <width> <list height> <tag1> <item1> <status1>...
- --radiolist <text> <height> <width> <list height> <tag1> <item1> <status1>...
- --ftree <file> <FS> <text> <height> <width> <menu height>
- --tree <FS> <text> <height> <width> <menu height> <item1>...
Kdialog поставляется в составе KDE. Имеет сходный интерфейс с dialog и xdialog. Но, на мой взгляд, kdialog более избыточен и менее функционален, нежели Zenity. Xmessage предназначается исключительно для вывода сообщений, но внешний вид, думаю, редкого пользователя может порадовать.
Необходимо учесть, что пользователь может и не иметь установленной Zenity. И не стоит забывать о том, что есть средства, такие как xdialog, dialog, kdialog, kmessage, и другие. Может быть, в вашем случае они подойдут больше.
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|