#!/usr/bin/perl use warnings; use strict; use Glib qw/TRUE FALSE/; use Gtk2 '-init'; # create a new window my $window = Gtk2::Window->new('toplevel'); $window ->signal_connect( "destroy" => sub { Gtk2->main_quit; } ); my $vbox = Gtk2::VBox->new( FALSE, 0 ); $window->add($vbox); $vbox->set_border_width(2); my $button = Gtk2::Button->new_from_stock('gtk-close'); my $button1 = Gtk2::Button->new_from_stock('gtk-close'); my $button2 = Gtk2::Button->new_from_stock('gtk-close'); $button->set_label('uh oh lost icon'); #won't work # sub by muppet find_and_set_label_in ($button2->child, "This worked"); $button->signal_connect( "clicked" => \&callback, "cool button" ); $button1->signal_connect( "clicked" => \&callback, "cool button1" ); $button2->signal_connect( "clicked" => \&callback, "cool button2" ); $vbox->pack_start( $button, FALSE, FALSE, 0 ); $vbox->pack_start( $button1, FALSE, FALSE, 0 ); $vbox->pack_start( $button2, FALSE, FALSE, 0 ); $window->show_all(); Gtk2->main; ################################################## # our usual callback function sub callback { my $widget = shift; my $data = shift; printf "Hello again - %s was pressed\n", $data; } ################################################## sub find_and_set_label_in { #muppet magic my ($widget, $text) = @_; print "@_\n"; if ($widget->isa (Gtk2::Container::)) { $widget->foreach (sub { find_and_set_label_in ($_[0], $text); }); } elsif ($widget->isa (Gtk2::Label::)) { $widget->set_text ($text); } }