Если вам нужно стандартное меню приложения, состоящее из пунктов Файл, Правка, Вид и т.п., используйте виджит Окно приложения Gnome
(рис. 24.9) — вы его найдете на страничке виджитов Gnome.Рис. 24.9
. Окно приложения GnomeЭто уже готовый шаблон окна с меню, панелью инструментов и строкой статуса. Удобно?
Если же вам нужно нестандартное меню, то выберите виджит Меню, который находится на вкладке основных виджитов окна Палитра. В окне свойств меню нажмите кнопку Правка меню. В открывшемся окне редактора вы можете создавать пункты меню.
Для создания пункта меню нажмите кнопку Добавить
и введите следующую информацию:♦ Метка — эту надпись увидит пользователь.
♦ Имя — это идентификатор пункта меню.
♦ Обработчик — имя функции-обработчика.
♦ Иконка — иконка, соответствующая пункту меню.
♦ Подсказка — обычно эта подсказка отображается в строке статуса при выборе пункта меню.
♦ Тип элемента — обычный, зависимый (радиокнопка) или независимый (флажок) переключатель.
♦ Ускоритель — горячая комбинация клавиш.
Рис. 24.10
. Редактор менюС помощью стрелок вы можете изменять положение пунктов меню.
24.5. Интересные виджиты
Интересных виджитов намного больше, чем будет описано в этом пункте, — каждый виджит по-своему интересен. Но мне больше всего понравились следующие виджиты:
♦ Шкала — виджит, напоминающий спидометр, находится на вкладке элементов Gnome.
♦ Выбор цвета — если этот виджит расположить в контейнере, то получится окно выбора цвета, которое очень похоже на стандартное окно выбора цвета среды Gnome (вкладка Дополнительно),
♦ Выбор шрифта — позволяет пользователю выбрать шрифт (вкладка Дополнительно).
♦ Диалоговое окно свойств — уже готовое окно свойств (напоминает окно свойств проекта), содержащее вкладки и кнопки OK
, Применить, Закрыть, Справка (вкладка Gnome).Рис. 24.11
. ШкалаРис. 24.12
. Выбор цветаРис. 24.13
. Выбор шрифтаРис. 24.14
. Окно свойствГлава 25
Пакет Dialog
25.1. Что такое Dialog?
Пакет dialog служит для вывода диалоговых окоп в сценариях bash
. Элементы пользовательского интерфейса мы будем, как и в GTK+, называть виджитами. Пакет dialog позволяет использовать следующие виджиты:♦ Infobox
, Msgbox — выводят информационные сообщения;♦ Inputbox
— принимает ввод текстовой информации;♦ Calendar
— позволяет выбрать дату;♦ Radiolist
— список зависимых переключателей;♦ Checklist
— список независимых переключателей;♦ Menubox
— используется для организации меню;♦ Gauge
— шкала прогресса.Установив пакет dialog, в каталоге /usr/share/doc/dialog-<версия>
25.2. Сообщения
Начнем с самого простого — отображения небольших текстовых сообщений. Для этой цели можно использовать два виджита — Infobox или Msgbox. Первый отличается от второго тем, что не ждет подтверждения пользователя о прочтении, а закрывается через некоторое время. Виджит Msgbox ждет, пока пользователь нажмет кнопку OK
или клавишу Enter.Рассмотрим пример использования виджита Msgbox:
Листинг 25.1. Виджит Msgbox
#!/bin/sh
DIALOG=${DIALOG=dialog}
$DIALOG --title "MESSAGE BOX" --clear \
--msgbox "Этот виджит используется для вывода \
сообщений. Ждет, пока пользователь нажмет Enter" 10 41
case $? in
0)
echo "OK";;
255)
echo "Нажата ESC.";;
esac
Теперь разберемся, что есть что. Параметр --title программы dialog задает заголовок виджита (рис. 25.1) Параметр --msgbox сообщает программе тип виджита, который нужно отобразить. После этого параметра нужно указать текст сообщения, заключенный в кавычки. В тексте можно использовать управляющие последовательности (\b, \n, \t,\ a и др.). После сообщения задаются размеры виджита.
Рис. 25.1
. Виджит MsgboxКонструкция case проверяет возвращенное программой dialog значение. Если пользователь нажал OK
(или <Ввод>), то программа возвращает 0, а если клавишу Esc, то 255.Виджит Infobox следует использовать так:
Листинг 25.2. Использование виджита Infobox
#! /bin/sh
DIALOG=${DIALOG=dialog}
# ждем указанное количество секунд
left=10
unit="секунд"
while test $left != 0
do
$DIALOG --sleep 1 \
--title "INFO BOX" \
--infobox "Это информационный бокс. Он отличается от \
msgbox тем, что не ждёт, пока пользователь нажмет Enter, \
а прекращает работу по истечении времени \