in reply to Closing GTK child windows via code
Hi ryan,
When you create the window, assign it to a variable, then call the hide() or destroy() method on the window. Use hide if you will be reusing the window.
Here is some sample code which brings up a window with 3 buttons. The first brings up an (imaginary) error in a new window, the second closes the app, and the third closes the other window ( the one with the error ). There is also a button on the error window to close itself.
#!/usr/bin/perl -w use Gtk; use strict; my $dialog; my $label; my @errors; sub error{ if ($dialog){ $label->set_text( "ERROR " . $errors[rand @errors] ) }else{ $dialog = new Gtk::Window() ; my $bbox = new Gtk::Widget "Gtk::VBox", visible => 1, parent + => $dialog; my $button = new Gtk::Widget "Gtk::Button", label => "Close", +parent => $bbox, visible => 1; $label = new Gtk::Widget "Gtk::Label", label => $errors[rand +@errors], parent => $bbox, visible => 1 ; $button->signal_connect( "clicked", sub{ $dialog->hide }); } $dialog -> show; } sub my_quit { exit(0); } sub remote_quit{ $dialog -> hide } # or $dialog -> destroy; # if you w +ill not be opening it again init Gtk; my $window = new Gtk::Widget "Gtk::Window", type => -toplevel, title => "Error box", allow_grow => 0, allow_shrink => 0, border_width => 10, visible => 1; $window->signal_connect("destroy" => \&Gtk::main_quit); $window->signal_connect("delete_event" => \&Gtk::false); my $box1 = new Gtk::Widget "Gtk::VBox", homogeneous => 0, spacing => 5, parent => $window, visible => 1; my $bbox= new Gtk::Widget "Gtk::HButtonBox", spacing => 5, parent => $ +box1, visible => 1; my $fixed = new Gtk::Widget "Gtk::Fixed", visible => 1; $fixed->set_usize(200,50); $label = new Gtk::Widget "Gtk::Label", label => "Waiting on user input +", parent => $box1, visible => 1 ; new Gtk::Widget "Gtk::HSeparator", parent => $box1, visible => 1; my $err_btn = new Gtk::Widget "Gtk::Button", label => "Click me", clicked => "error", visible => 1, parent => $bbox; my $quit = new Gtk::Widget "Gtk::Button", label => "Quit", clicked => "my_quit", visible => 1, parent => $bbox; my $rquit = new Gtk::Widget "Gtk::Button", label => "Close the other window", clicked => "remote_quit", visible => 1, parent => $bbox; main Gtk; BEGIN{ @errors=( "Remote message: I don't like you. Go 'way.", "oh no, there is a 0 in the matrix!", "Error in matrix: Agent Smith Activated", "D'oh you've deleted the data set", "Matrix Error: You might want to take a pill", "so...lemme guess, you just clicked yes?", "no ks7 data left after removeal of zero channels", "Almost converged, you can probably stop now", "write(0,*) 'Game Over'", "I just Cannea do it Cap'n I just dinnea hea the powe +r.", "Warning: Can't get handle for AAAGH NO SWITCH IT OFF +!!! SWITCH IT OFFF!!!", "print *,'2.7182818'", "STOP PRESSING THE BUTTON GODDAMIT", + ); }
Hope this helps
thinker
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Closing GTK child windows via code
by ryan (Pilgrim) on Sep 20, 2003 at 12:01 UTC |
In Section
Seekers of Perl Wisdom