MyTetra Share
Делитесь знаниями!
Ремонт замков от Городской службы по замкам - подробности на официальном сайте компании
Zenity: взаимодействие shell-скриптов с пользователем
Автор: Андрей Уваров
Текстовые метки: linux, инерфейс, скрипт, zenity
Раздел: Компьютер - Linux - Языки создания интерфейсов
Запись: xintrea/mytetra_syncro/master/base/0000000011/text.html на raw.github.com

Взаимодействие shell-скриптов с пользователем посредством Zenity

В данной статье речь пойдёт о том, каким образом можно без особых усилий
сделать графический интерфейс к shell-скриптам.


Если вы хотите сделать взаимодействие ваших программ с пользователем более простым, то эта статья для вас, и не важно, какой язык вы используете, будь то bash, perl, python и т. п.

Итак, Zenity является утилитой отображения диалогов. Программа имеется в составе большинства распостранённых дистрибутивов Linux, хотя ее можно скомпилировать или найти уже в бинарном виде практически для любой *nix-системы.

Взаимодействие с X-сервером производится с помощью библиотеки GTK+.

Рассмотрим функциональные возможности данной программы. Имеется десять видов диалогов.

1. Calendar - календарь (date-picker).

2. Entry - однострочное текстовое поле ввода.

3. Text-info - диалог отображения многострочной текстовой информации, который может применяться и как поле ввода. Хотя, по всей видимости, это не является его основным назначением.

4. Error - сообщение об ошибке.

5. Info - сообщение общего характера.

6. Warning - предупреждение.

7. Question - вопросительное сообщение с возможностью ввода утвердительного или отрицательного ответа.

8. File-selection - выбор файла.

9. List - список с возможностью выбора и редактирования его элементов.

10. 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.

Попробуем написать простое приложение, запрашивающее дату рождения пользователя.

-----8<-----

#! /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"`;

-----8<-----


Entry

* Text - сообщение, выводимое над полем ввода.

* Entry-text - текст, которым автоматически заполняется поле ввода.

* Hide-text - если присутствует, то вводимые символы отображаются «звёздочками».

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

-----8<-----
#! /bin/sh

```zenity --entry --title "Run command" --text "Command:```

-----8<-----


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

* --msgbox

* --prgbox «»

* --infobox

* --inputbox []

* --textbox

* --menu ...

* --checklist ...

* --radiolist ...

* --ftree

* --tree ...

Kdialog поставляется в составе KDE. Имеет сходный интерфейс с dialog и xdialog. Но, на мой взгляд, kdialog более избыточен и менее функционален, нежели Zenity. Xmessage предназначается исключительно для вывода сообщений, но внешний вид, думаю, редкого пользователя может порадовать.

Необходимо учесть, что пользователь может и не иметь установленной Zenity. И не стоит забывать о том, что есть средства, такие как xdialog, dialog, kdialog, kmessage, и другие. Может быть, в вашем случае они подойдут больше.

 
MyTetra Share v.0.59
Яндекс индекс цитирования