|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Yury Yurevich 2:5020/400 17 Feb 2005 09:52:33 To : Yury Yurevich Subject : Re: Perl/Tk -------------------------------------------------------------------------------- Yury Yurevich пишет: > Интересует информация по теме perl/tk. > > Построение GUI в Perl при помощи Tk изучал по "Mastering Perl/Tk" > (изд-во O'Reilly), читал статьи с www.perltk.org. Hаписал пару несложных > программ. Хотел бы пообщаться со знающими людьми на тему правильного > подхода к написанию Tk-интерфейса. Теперь конкретные вещи: Возникла необходимость построить наборь полей ввода, для этого я написал функцию, которой передаются параметры: 1. родительский виджет 2. ссылка на массив названий полей 3. ссыдка на ключи, в которых хранятся введенные данные (для хранения данных я использовал глобальный хеш DAT) 4. Опционально -- номер строки ввода, на которую нужно поставить фокус В итоге формируется массив хешей (с ключами frame, label и entry), которые содержат ссылки на соответствующие объекты. Таким же образом я хочу сделать и функцию, которая будет формировать массив не только строк ввода, но и других виджетов ввода (ниспадающий список, etc...) Вопрос собственно в правильности подхода. Hасколько правильно\неправильно я сделал? Hе хочеться в очередной раз изобретать велосипед, может кто уже делал похожие вещи? Вопросов на самом деле масса. В первую очередь вопросы касаются не отдельных виджетов, а построению полнофункционального интерфейса. И поэтому, интересуют примеры построения на Perl/Tk приложения более сложного, чем примеры из widget. Код: sub fieldsinit { d("fieldsinit") if DEBUG; my $toplevel = shift; my $label_ary = shift; my $var_ary = shift; my $focus = shift || 0; d("fieldsinit at $toplevel") if DEBUG; my @fields=(); my $i=0; d(":: fields generating formframe") if DEBUG; my $formframe = $toplevel->Frame( -relief => 'groove', -borderwidth => '2' )->pack( -side=>'top', -pady => '2', -anchor => 'n' ); d(":: open cycle for fields (".$#$label_ary.")") if DEBUG; for($i=0;$i<=$#$label_ary;$i++) { d(":: $i cycle of fields") if DEBUG; $fields[$i]={}; $fields[$i]->{frame}=$formframe->Frame( )->pack( -side=>'top', -padx => '2', -pady => '2', -anchor => 'e', ); $fields[$i]->{entry}=$fields[$i]->{frame}->Entry( -width => '30', -relief => 'sunken', -textvariable =>\$DAT->{$var_ary->[$i]}, )->pack( -side => 'right' ); $fields[$i]->{label}=$fields[$i]->{frame}->Label( -text => $label_ary->[$i], -anchor => 'e', -font => $mainfont, )->pack( -side => 'right', ); } # end of cycle # setting focus d(":: focus at $focus entry") if DEBUG; $fields[$focus]->{entry}->focus(); d("end of fieldsinit") if DEBUG; return \@fields; } # end of sub fieldsinit P.S. Есть ли примеры создания\сопровождения ПО на Perl/Tk? Или приложения на Perl/Tk ограничиваются примерами и созданием одноконных фронтендов к стандартным утилитам? Hе станет ли для более-менее серъезного проекта Tk узким местом? Какая есть альтернатива? -- wbr, Yury Yurevich icq://209846262 http://asko-zabota.ru --- ifmail v.2.15dev5.3 * Origin: ASKO-Zabota (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/91045315a58a.html, оценка из 5, голосов 10
|