Здрасти всем! Давно ничего не писал, небыло возможности сидеть в интернете. Пост посвящен простому инструменту для создания GUI окон в скриптах, при помощи zenity не надо вникать в тяжбы GTK или QT за вас это сделает zenity.
Основы использования
Когда вы пишете скрипт или обрабатываете написанный другими, вы можете использовать Zenity и создавать простые диалоги, которые взаимодействую с пользователем графически:
- Можно создать диалоговые окна для получения информации от пользователя. Например, вы можете предложить пользователю выбрать дату из календаря, или чтобы выбрать файл из диалоговое окно
- Можно создать диалоговое окно для предоставления пользователю информации. Например, вы можете использовать диалог прогресса для отражения текущего статуса операции, или использовать предупреждение диалоговое окно для оповещения пользователя
Когда пишите команды Zenity убедитесь что помещаете каждый аргумент в кавычки
Пример:
zenity --calendar --title="Планировщик"
Описание:
Zenity — даем команду на использование
--calendar — назначаем диалоговое окно
--title — заголовок или другие параметры к диалоговому окну
Если кавычки не используются, то можно получить неожиданные результаты
Общие параметры:
- Заголовок окна
--title=заголовок
- Иконка которая отображается в рамке окна, существуют четыре дефолтных типа иконок
'info', 'warning', 'question' и 'error'.
- Иконка которая отображается в рамке окна из изображения
--window-icon=путь_к_значку
- Ширина окна
--width=ширина
- Высота окна
--height=высота
- Задает таймаут в секундах, после которого окно будет закрыто
--timeout=timeout
Коды Выхода
Zenity возвращает следующие коды выхода:
- Пользователь нажал либо OK, либо Закрыть.
0 (ноль)
- Пользователь либо нажал Отмена, либо использовал функции окна, чтобы закрыть диалоговое окно.
1 (один)
- Произошла неожиданная ошибка.
-1 (минус один)
Значок уведомления в трее
#!/bin/sh
zenity --notification\
--window-icon="info" \
--text="Необходимо обновить систему."
Окно сообщения
Zenity можно создавать четыре типа сообщений:
- Error (Ошибка)
- Information (Информация)
- Question (Вопрос)
- Warning (Предупреждение)
Пример — выполните в консоли запрос с вопросом (тип Question)
zenity --question --title="Инструкция по Zenity" --text "Вы уверены что хотите продолжить?"
Диалог ввод текста
Используйте возможность создать диалог для ввода текста «entry». Zenity возвращает содержимое ввода текста на стандартный вывод
Поддерживает опции:
- Задает текст, отображаемый в окне ввода
--text=text
- Задает текст, отображаемый в поле ввода
--entry-text=text
- Скрывает текст в поле ввода
--hide-text
Пример:
#!/bin/sh
if zenity --entry \
--title="Добавить запись" \
--text="Ввести парооль:" \
--entry-text "пароль" \
--hide-text
then echo $?
else echo "Пароль не введен"
fi
Диалог прогресса (выполнения)
Zenity считывает данные из стандартного ввода строка за строкой. Если строка начинается с #, то текст, следу ющий за этим префиксом размещается в диалоговом окне. Если строка содержит только число, то индикатор прогресса устанавливается на этот процент выполнения
Поддерживает опции:
- Указывает текст, который будет изображён в диалоговом окне
--text=текст
- Указывает начальное состояние индикатора прогресса
--percentage=процент
- Диалоговое окно закрывается, когда процент выполнения достиг 100%
--auto-close
- Указывает, что индикатор прогресса пульсирует до тех пор, пока из стандартного ввода не будет прочитан символ конца файла EOF
--pulsate
Пример:
#!/bin/sh
(
echo "10" ; sleep 1
echo "# Выполнение задачи 1" ; sleep 1
echo "20" ; sleep 1
echo "# Выполнение задачи 2" ; sleep 1
echo "50" ; sleep 1
echo "Выполнение задачи 3" ; sleep 1
echo "75" ; sleep 1
echo "# Перезагружаю систему" ; sleep 1
echo "100" ; sleep 1
) |
zenity --progress \
--title="Выполнение задач" \
--text="Выполняю..." \
--percentage=0
if [ "$?" = -1 ] ; then
zenity --error \
--text="Выполнение отменено."
fi
Окно выбора файла
Используем «file-selection» чтобы создать диалог выбора файла. Zenity возвращает выбранные файлы или каталоги на стандартный вывод
Поддерживает опции:
- Указывает файл или директорию, которая будет выбрана в диалоговом окне
--filename=имя файла
- Позволяет выбирать сразу несколько файлов в окне выбора
--multiple
- Позволяет выбирать только директории в диалоговом окне выбора файла
--directory
- Устанавливает диалоговое окно в режим сохранения файла
--save
- Указывает строку, которая будет использована для разделения возвращённого списка имён файлов
--separator=разделитель
Пример:
#!/bin/sh
FILE=`zenity --file-selection --title="Выберите файл"`
case $? in
0)
echo "Выбран \"$FILE\".";;
1)
echo "Файл не выбран.";;
-1)
echo "Файл не выбран.";;
esac
Полное руководство на русском языке можно почитать на сайте >
Gnome
Еще примеры
Запуск программы с параметром.
После запуска выбираем открываемый файл который в свою очередь откроется в gedit. Имеет тот же эффект, что и набор в терминале
gedit ~/example.txt
только Zenity это делается в графическом виде.
gedit $(zenity --file-selection)
Выбор профиля Google Chrome
При запуске будет предложено ввести имя профиля для использования браузера.
/opt/google/chrome/google-chrome --user-data-dir=$HOME/.config/google-chrome/`zenity \
--entry --text="Enter a profile name:"`
Shutdown (Выключатель)
Делаем свою кнопку выключения
#!/bin/sh
zenity --question --title "Подтверждение о завершения работы" \
--text "Вы уверены, что хотите завершить работу?"
if [ "$?" -eq "0" ]
then
#Можно заменить gksudo на sudo . Если sudo не настроен, то gksu или su -c "init 0"
gksudo init 0;
fi
Простой текстовый редактор
В этом примере отображается диалоговое окно просмотра файлов, из которых вы выбраете файл для редактирования, затем он открывает окно текстового поля, где вы можете ввести или вставить текст. Чтобы приступить к редактированию нового файла нажмите «Закрыть».
#!/bin/bash
zOpenPath="$(zenity --file-selection)"
if [ "$zOpenPath" != "" ]
then
zData=$(cat "$zOpenPath")
zNewData=$(echo -n "$zData" | zenity --text-info --editable --width 650 --height 400)
zSavePath=$(echo -n "$(zenity --file-selection --filename="$zOpenPath" --save --confirm-overwrite)")
echo -n "$zNewData" > "$zSavePath"
fi
Поиск в google
Показывает небольшую строку для ввода текста, нажать кнопку «ОК», откроется страница с вашим запросом в браузере Firefox, «firefox» можно заменить на любой другой.
firefox "http://www.google.com/search?q=$(zenity --entry --text "Search Google")"
Uptime системы
Графическое отображение времени работы (аптайма) системы
zenity --info --text "$(uptime)"
zenity + wget = GUI wget
Для тех, кто не любит качать тяжелые файлы браузером из файлообменников, а также для тех кто хочет получше понять работу zenity.
zenity + wget = GUI wget
На этом пожалуй закончу, спасибо за внимание!
Комментариум (6)
RSS свернуть / развернутьraxp
Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/makenskiy/www/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
Спасибо, как раз недавно хотел порыться в эту сторону
terra
Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/makenskiy/www/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
makenskiy
Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/makenskiy/www/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
itshnic
Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/makenskiy/www/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
Anonymous
Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/makenskiy/www/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
if [ "$?" = -1 ] ; then
ошибка, т.к. возвращаемые значения есть:
-1 - сообщает о том, что операция завершилась с ошибкой;
1 - означает, что пользователь нажал кнопку "Отмена" (Cancel) или воспользовался функциями (кнопками) окна, чтобы закрыть его;
Вы, видимо, скопировали статью не читая, ибо, в её оригинале, за авторством Алексея Снастина, присутствует та же ошибка. Ссылка на оригинал - http://www.ibm.com/developerworks/ru/library/l-zenity/
Anonymous
Warning: Smarty error: unable to read resource: "cmtedit_button.tpl" in /home/makenskiy/www/itbuben.org/public_html/engine/lib/external/Smarty-2.6.19/libs/Smarty.class.php on line 1092
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.