Unix-way → Zenity простое GUI в linux

Здрасти всем! Давно ничего не писал, небыло возможности сидеть в интернете. Пост посвящен простому инструменту для создания GUI окон в скриптах, при помощи zenity не надо вникать в тяжбы GTK или QT за вас это сделает zenity.

Основы использования

Когда вы пишете скрипт или обрабатываете написанный другими, вы можете использовать Zenity и создавать простые диалоги, которые взаимодействую с пользователем графически:

  • Можно создать диалоговые окна для получения информации от пользователя. Например, вы можете предложить пользователю выбрать дату из календаря, или чтобы выбрать файл из диалоговое окно
  • Можно создать диалоговое окно для предоставления пользователю информации. Например, вы можете использовать диалог прогресса для отражения текущего статуса операции, или использовать предупреждение диалоговое окно для оповещения пользователя

Когда пишите команды Zenity убедитесь что помещаете каждый аргумент в кавычки

Пример:

zenity --calendar --title="Планировщик"

Zenity календарь

Описание:

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-notification

Окно сообщения

Zenity можно создавать четыре типа сообщений:

  • Error (Ошибка)
  • Information (Информация)
  • Question (Вопрос)
  • Warning (Предупреждение)

Пример — выполните в консоли запрос с вопросом (тип Question)

zenity --question --title="Инструкция по Zenity" --text "Вы уверены что хотите продолжить?"


zenity-question

Диалог ввод текста

Используйте возможность создать диалог для ввода текста «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-notification

Диалог прогресса (выполнения)

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


zenity-progress

Окно выбора файла

Используем «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

zenity-file-selection

Полное руководство на русском языке можно почитать на сайте > 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:"`


zenity-notification

Shutdown (Выключатель)

Делаем свою кнопку выключения


#!/bin/sh
zenity --question --title "Подтверждение о завершения работы" \
--text "Вы уверены, что хотите завершить работу?"
 
if [ "$?" -eq "0" ]
then
        #Можно заменить gksudo на sudo . Если sudo не настроен, то gksu или su -c "init 0"
        gksudo init 0;
fi


zenity-init 0-question

Простой текстовый редактор

В этом примере отображается диалоговое окно просмотра файлов, из которых вы выбраете файл для редактирования, затем он открывает окно текстового поля, где вы можете ввести или вставить текст. Чтобы приступить к редактированию нового файла нажмите «Закрыть».

#!/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


zenity-text-editor

Поиск в google

Показывает небольшую строку для ввода текста, нажать кнопку «ОК», откроется страница с вашим запросом в браузере Firefox, «firefox» можно заменить на любой другой.

firefox "http://www.google.com/search?q=$(zenity --entry --text "Search Google")"


zenity-entry

Uptime системы

Графическое отображение времени работы (аптайма) системы

zenity --info --text "$(uptime)"


zenity-info-uptime

zenity + wget = GUI wget

Для тех, кто не любит качать тяжелые файлы браузером из файлообменников, а также для тех кто хочет получше понять работу zenity.

zenity + wget = GUI wget

На этом пожалуй закончу, спасибо за внимание!
  • avatar
  • itshnic
  • 13534
  • +21
  • 22 марта 2011, 15:33

Комментариум (6)

RSS свернуть / развернуть
+
+4
avatar

raxp

  • 22 марта 2011, 15:37

  • 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
О! Welcome Back, itshnic! :)
Спасибо, как раз недавно хотел порыться в эту сторону
+
+4
avatar

terra

  • 22 марта 2011, 15:38

  • 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
Пасибки!
+
+4
avatar

makenskiy

  • 22 марта 2011, 20:31

  • 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 [ "$?" -eq "0" ]
then
        #Можно заменить gksudo на sudo . Если sudo не настроен, то gksu или su -c "init 0"
        gksudo init 0;
fi
+
+2
avatar

itshnic

  • 23 марта 2011, 19:51

  • 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
Вечно парюсь. Спасибо исправил )
+
0
avatar

Anonymous

  • 28 марта 2013, 15:18

  • 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/
+
0
avatar

Anonymous

  • 28 марта 2013, 15:24

  • 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
PS: Предвидя недоразумение, скажу, что мне кажется очевидным, что сообщение "Выполнение отменено", подразумевает именно нажатие пользователем кнопки отмена, а не ошибку в работе программы.

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.