Описание Gtk-Perl | ||
---|---|---|
Предыдущая | Следующая |
Некоторые виджеты GTK не являются объектами X т.к. являются исключительно дочерними. Они не могут получать события при изменении размера и т.п. Если бы хотите большего от таких типов виджетов - то виджет области события - то, что Вам необходимо.
На первый взгляд виджет области события практически бесполезен. Он ничего не отрисовывает и не отвечает ни на какие события. Однако он действительно обеспечивает панель X для дочернего виджета. Это важно, т.к. много виджетов GTK не имеют связанной X панели. Не имея X панели, виджет экономит память и улучшает работу, но с другой стороны и имеет много недостатков. Виджет без X панели не может получать события и не является перерисовывающимся в зависимости от действия пользователя с программой. Хотя название EventBox подчеркивает обработку события, виджет может также использоваться и для отсечения:
Для создания нового виджета области события используется функция:
$event = new Gtk::EventBox();
Дочерний виджет может быть добавлен на этот виджет области события так:
$event_box->add( $child_widget );
Нижеследующий пример показывает использование виджета области события. На панели можно кликнуть, вызвав выход и изменять её размеры.
#!/usr/bin/perl -w use Gtk ; use strict ; set_locale Gtk; init Gtk; my $false = 0; my $true = 1; my $window; my $event_box; my $label; # Создаем панель $window = new Gtk::Window( "toplevel" ); $window->set_title( "Виджет области события" ); $window->signal_connect( "destroy", sub { Gtk-> exit ( 0 ); } ); $window->border_width( 10 ); # Создание виджета области события и добавление его на наш toplevel (??) $event_box = new Gtk::EventBox(); $window->add( $event_box ); $event_box->show(); # Создание длинного лейбла $label = new Gtk::Label( "Нажмите тут и закончите, закончите, закончите, закончите..." ); $event_box->add( $label ); $label->show(); # укоротить. $label->set_usize( 110, 20 ); # Забиндить на нем событие $event_box->set_events( 'button_press_mask'); $event_box->signal_connect( "button_press_event", sub { Gtk-> exit ( 0 ); } ); # необходимая для X панели строка $event_box->realize(); # 58 - некоторое число 'hand1', которое не работает в силу некоторых причин $event_box->window->set_cursor( new Gtk::Gdk::Cursor( 58 ) ); $window->show(); main Gtk; exit ( 0 ); # конец примера
скриншот
Предыдущий | На главную | Следующий |
Текущая позиция | вверх | Позиционируемый виджет |