| |
![]() |
Иерархия наследования
Inheritance Hierarchy Object +--- Widget +--- Container +--- Bin +--- Button
Есть два пути создания кнопок, создать пустую кнопку и добавить потомка позднее или создать кнопку с лейблом как потомка:
$button = new Gtk::Button(); $button = new Gtk::Button( $label ); $button = new_with_label Gtk::Button( $label );
Первая функция создает пустую кнопку, две послдение создают её с лейблами. Средная просто сокращение последней. Если создается кнопка с лейблом, то можно использовать button->child для доступа к виджету-потомку. Например, чтобы изменить текст в на лейбле, нужно сделать так:
$button->child->set( "new label" );
Если кнопка с лейблом не создается, то необходимо виджет добавить к кнопке. Например три следующих примера эквивалентны:
# создать кнопку с лейблом $button = new Gtk::Button( "text" ); # тоже самое, но с другой функцией new() $button = new_with_label Gtk::Button( "text" ); # создать лейбл, отделенный от кнопки и объединить их потом вручную. $button = new Gtk::Button(); $label = new Gtk::Label( "text" ); $button->add( $label );
Сигналы, посылаемые кнопками.
Виждет кнопки посылает следующие сигналы:
'pressed' - посылается, когда кнопка нажата в пределах её размеров, или когда происходит вызов функции $button->pressed()
'released' - посылается, когда когда кнопка отжата в пределах её размеров, или когда происходит вызов функции $button->released()
'clicked' - когда кнопка нажата и отпущена в пределах размеров или когда вызывается функция $button->clicked()
'enter' - когда курсор мыши входит в пределы кнопки или когда вызывается функция $button->enter()
'leave' - когда курсор выходит из области, где нарисвана кнопка, соответственно эмитация выхода, как и выше, может быть вызвана програмно $button->leave()
Стили
Стили кнопок могут быть трех типов: 'normal', 'half' и 'none'. 'normal' - по умолчанию, для утсановки и апроса стиля, нужно писать следующее:
$button->set_relief( $relief_style ); $button->get_relief();
Ниже пример, в котором создается кнопка с лейблом, который в дальнейшем изменяется, далее удаляется и переопределяется вручную и в конце по третьему клику происходит выход из формы с кнопкой.
#!/usr/bin/perl -w use Gtk; use strict; set_locale Gtk; init Gtk; my $false = 0; my $true = 1; my $window = new Gtk::Window( "toplevel" ); my $button = new Gtk::Button( "Button created with label" ); my $label; my $id; my $numclicked = 0; # обработка выхода $window->signal_connect( "delete_event", \&CloseWindowEvent ); $button->signal_connect( "clicked", \&ClickedButtonEvent ); # атрибуты $button->show(); # атрибуты окна $window->border_width( 15 ); $window->add( $button ); $window->show(); # вызов Gtk main Gtk; exit( 0 ); ### Подпрограммы # вызов когда кнопка кликнется, при первом нажатии лейбл изменяется, при втором нажатии лейбл добавляется к кнопке, при # третьем нажатии лейбл меняется и пи четвертом происходит выход из программы sub ClickedButtonEvent{ if ( $numclicked == 0 ){ $button->child->set( "Changed Button Label" ); $numclicked++; } elsif ( $numclicked == 1 ){ $window->remove( $button ); $button = new Gtk::Button(); $label = new Gtk::Label( "Label added to a button" ); $button->add( $label ); $label->show(); $button->show(); $window->add( $button ); $id = $button->signal_connect( "clicked", \&ClickedButtonEvent ); $numclicked++; } elsif ( $numclicked == 2 ) { $label->set( "Now Click to Close Window" ); $numclicked++; } else { Gtk->exit( 0 ); } } # Callback called when the window is asked to close. What really # happens is that the window moves down and to the right. This is an # excellent example of a program that doesn't act like the user # expects. sub CloseWindowEvent { # If you return a false value in the "delete_event" signal # handler, GTK will emit the "delete_event" signal. # Returning a true value means you don't want the window to # be destroyed. $window->window->move( 100, 100 ); return $true; }
сделать скриншоты работы программы
Закладки на сайте Проследить за страницей |
Created 1996-2025 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |