GTK-Perl und Glade
am 19.01.2007 13:39:09 von Markus Hochholzer
Hallo,
momentan hat es mir die GUI-Entwicklung mit Glade und GTK2 sehr angetan.
Dazu folgenden Code:
#!/usr/bin/perl
use Gtk2 -init;
use Gtk2::GladeXML;
use Glib;
my $glade;
my $mainwin;
my $splash;
my $openfile;
my $choosefolder;
my $savefile;
$glade = Gtk2::GladeXML->new('myFirstTest.glade');
$glade->signal_autoconnect_from_package('main');
init_gui();
Gtk2->main();
exit 0;
sub init_gui {
$splash = $glade->get_widget('Splash')->destroy;
$mainwin = $glade->get_widget('Main');
$openfile = $glade->get_widget('OpenFile')->hide;
$choosefolder = $glade->get_widget('ChooseFolder')->hide;
$savefile = $glade->get_widget('SaveFile')->hide;
$about = $glade->get_widget('About')->hide;
}
Wenn ich das Programm nun starte, sieht man, wie alle Fenster aufgebaut
werden. Ist dieses Verhalten normal?
Gruß Markus
Re: GTK-Perl und Glade
am 19.01.2007 15:31:29 von Johannes Plunien
Hallo Markus,
> $glade = Gtk2::GladeXML->new('myFirstTest.glade');
>
> Wenn ich das Programm nun starte, sieht man, wie alle Fenster aufgebaut
> werden. Ist dieses Verhalten normal?
Ja, das Verhalten ist normal. Du kannst aber auch bestimmen, welches
Element der XML Datei die Wurzel sein soll:
$gladexml = Gtk2::GladeXML->new(GLADE_FILE, [ROOT, DOMAIN])
Ich nehme an, du hast mehrere solche Elemente in deiner XML Datei:
...
...
...
Moechtest du nun nur window3 darstellen, machst du:
$gladexml = Gtk2::GladeXML->new('myFirstTest.glade', 'window3');
vergleiche: [1]
[1] http://search.cpan.org/~tsch/Gtk2-GladeXML-1.006/GladeXML.pm #FUNCTIONS
--
Johannes Plunien | mailto:plu@pqpq.de | http://www.pqpq.de
Re: GTK-Perl und Glade
am 20.01.2007 04:15:11 von Phil
Am Fri, 19 Jan 2007 13:39:09 +0100 schrieb Markus Hochholzer:
> Hallo,
>
> momentan hat es mir die GUI-Entwicklung mit Glade und GTK2 sehr angetan.
> [...]
> Wenn ich das Programm nun starte, sieht man, wie alle Fenster aufgebaut
> werden. Ist dieses Verhalten normal?
Du kannst in Glade im Reiter 'Gemeinsam' für alle Widgets auch die
property visible setzen. Die Fenster die nicht beim Start angezeigt werden
sollen auf 'nicht sichtbar' setzen und bei Bedarf mit $window->show
anzeigen.
Dann ist es meist auch sinnvoll irgendwas bei einem delete-event zu
machen. Wenn der User rechts oben das [X] klickt wird das Fenster nämlich
zerstört und man müsste es bei Bedarf wieder neu erzeugen und alle
vorherigen Ãnderungen gehen verloren.
Mit $window->hide_on_delete wird das Fenster bei einem delete-event
per $window->hide unsichtbar gemacht, damit man es später wiederverwenden
kann.
Bei vielen Fenstern mit vielen Widgets kann es auch sinnvoll sein, diese
in separaten glade Dateien zu verwalten.
Viele GrüÃe, Phil