#!/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; # callback registration $window->signal_connect( "delete_event", \&CloseWindowEvent ); $button->signal_connect( "clicked", \&ClickedButtonEvent ); # button attributes $button->show(); # window attributes $window->border_width( 15 ); $window->add( $button ); $window->show(); # Gtk event loop main Gtk; exit( 0 ); ### Subroutines # callback called when the button is clicked 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 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; } # END EXAMPLE PROGRAM