Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 [ 175 ] 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242

В списковом контексте expect возвращает список из пяти элементов. Первый элемент определяет номер совпавщей строки или шаблона (идентично возвращаемому значению в скалярном контексте). Второй элемент - строка с описанием причины возврата из expect. При отсутствии ошибок второй аргумент равен undef. Возможные варианты ошибок: "1 :TIMEOUT", "2: EOF, "3: spawn id(...) died" и "4: . " (смысл этпх сообщений описан в Expect{3)). Третий элемент в возвращаемом списке expect равен совпавшей строке. Четвертый элемент - текст до совпадения, а пятый - текст после совпадения.

Передача данных программе, находящейся под управлением Expect, сводится к простейшему вызову print. Единственная трудность состоит в том, что терминалы, устройства и сокеты отличаются по тем последовательностям, которые они передают и принимают в качестве разделителя строк, - мы покинули убежище стандартной библиотеки ввода/вывода С, поэтому автоматическое преобразование в "\п не происходит. Рекомендуем начать с \г"; если не получится, попробуйте Хп и "\г\п".

После завершения работы с запущенной программой у вас есть три возможности. Во-первых, можно продолжить работу с главной программой; вероятно, запущенная программа будет принудительно завершена по завершении главной программы. Однако в этом случае плодятся лишние процессы. Во-вторых, если запущенная программа должна нормально завершиться после вывода всех данных или но некоторому внешнему условию (как, например, telnet при выходе из удаленного командного интерпретатора), вызовите метод soft close. Если запущенная программа будет работать бесконечно (например, tail -f), вызовите метод hard close; он уничтожает запущенный процесс.

> Смотри также-

Документация по модулям Expect, IO:Pty и IO:Stty от CPAN.

15.14. Создание меню с помощью Тк

Проблема

требуется создать окно, в верхней части которого находится меню.

Решение

Воспользуйтесь элементами Тк Menubutton и Frame:

use Тк,

$main = MainWindow->new(),

# Создать для меню горизонтальную область

# в верхней части окна.

Smenubar = $main->Frame(-relief => raised,

-borderwidth => 2)

->pack (-anchor => "nw",

-fill => x"),



# Создать кнопку с надписью "File для вызова меню. $file menu = $menubar->Menubutton(-text => "File",

-underline => 1) ->pack (-side => "left" );

# Создать команды меню "File" $file menu->command(-label => "Print,

-command => \&Print);

To же самое можно сделать намного проще, если воспользоваться сокращенной записью -menuitems:

$file menu = $menubar->Menubutton(-text => File",

-underline=> 1, -menuitems=> [ [ Button => "Print",-command => \&Print ], [ Button => "Save",-command => \&Save ] ]) ->pack(-side => "left");

Комментарий

Меню приложения можно рассматривать как совокупность четырех компонентов: области (Frame), кнопок меню (Menubutton), меню (Menus) и команд меню (Menu Entries). Область представляет собой горизонтальную полосу в верхней части окна, в котором находится меню. Внутри области находится набор кнопок меню, открывающих различные меню: File, Edit, Format, Buffers и т. д. Когда пользователь щелкает на кнопке меню, на экране появляется соответствующее меню - вертикальный список команд.

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

С командами (например. Print в меню File) ассоциируются фрагменты кода. При выборе команды меню вызывается соответствующая функция. Обычно это делается так:

$file menu->command(-label => "Quit Immediately", -command => sub { exit } ),

С разделителями действия не связываются:

$file menu->separator();

Команда-флажок может находиться в установленном (on) или сброшенном (ofО состоянии, и с ней ассоциируется некоторая переменная. Если переменная находится в установленном состоянии, рядом с текстом команды-флажка стоит специальная пометка (маркер). Если переменная сброшена, маркер отсутствует. При выборе команды-флажка переменная переходит в прртивоположное состояние.

$options menu->checkbutton(-label => "Create Debugging File",

-variable => \$debug, -onvalue => 1, -offvalue => 0);

Группа команд-переключателей ассоциируется с одной переменной. В любой момент времени установленной может быть лишь одна команда-переключатель.



ассоциированная с переменной. При выборе команды-переключателя переменной присваивается ассоциированное значение:

$debug menu->radiobutton(-label => "Level 1",

-variable => \$log level, -value => 1);

$debug menu->radiobutton(-label => "Level 2",

-variable => \$log level, -value => 2);

$debug menu->radiobutton(-label => "Level 3",

-variable => \$log level, -value => 3);

Вложенные меню создаются с помощью каскадных команд. Например, в Netscape Navigator кнопка меню File содержит каскадную команду New, которая открывает подменю с несколькими вариантами. Создать каскадную команду сложнее, чем любую другую: вы должны создать каскадную команду, получить ассоциированное с ней новое меню и создать команды в этом меню.

# Шаг 1: создать каскадную команду меню $format menu->cascade (-label => "Font");

# Шаг 2: получить только что созданное меню $font menu = $format menu->cget("-menu");

# Шаг 3: заполнить это меню

$font menu->radiobutton (-label => "Courier",

-variable => \$font name,

-value => "courier"); $font menu->radiobutton (-label => "Times Roman",

-variable => \$font name,

-value => "times");

Отсоединяемый разделитель позволяет перемещать меню, в котором он находится. По умолчанию все кнопки меню и каскадные команды открывают меню, в верхней части которого находится отсоединяемый разделитель. Чтобы создать меню без него, воспользуйтесь параметром -tearoff:

$format menu = $menubar->Menubutton(-text => "Format",

-underline => 1 -tearoff => 0)

->pack;

$font menu = $format menu->cascade(-label => "Font",

-tearoff => 0);

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



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 [ 175 ] 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242