Schrift
[thread]12903[/thread]

Glade2 (GUI-Generator) - Komplette Container Clonen (Vbox, Hbox .. etc)

Leser: 3


<< |< 1 2 >| >> 17 Einträge, 2 Seiten
IceRage
 2008-12-13 17:36
#117175 #117175
User since
2008-09-07
93 Artikel
BenutzerIn
[default_avatar]
Hallo,

bin grad dabei ein bisschen tiefer in die Arbeit mit Glade2 einzusteigen, gefällt mir auch ganz gut soweit. Alles noch sehr rudimentär, aber es wird wohl werden.

Ich habe eine VBox mit verschiedenen CheckBoxen, Textfeldern, und Bildanzeigebereichen erstellt, und würde diese gern pro Datensatz clonen, also quasi wie ein Template, oder ähnliches benutzen.

Hat jemand eine Ahung, ob es für so etwas geeignete Methoden gibt?


Gruß, IceRage
GwenDragon
 2008-12-13 17:39
#117176 #117176
User since
2005-01-17
14747 Artikel
Admin1
[Homepage]
user image
murphy
 2008-12-13 17:50
#117178 #117178
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
@IceRage: Soweit ich weiß hat das GObject-System keine eingebaute Möglichkeit zum klonen von Objekten. Und bei GUI-Objekten bekommt man sowieso in der Regel einen Haufen Probleme, wenn man einfach eine Kopie von ihnen anfertigt.

Vielleicht wäre es besser, wenn Du den jeweils "aktuellen" Datensatz über Properties und Events an die Kontrollelemente binden würdest?


@GwenDragon: Ich denke, Glade2 ist in C geschrieben. Aber man kann die GUIs, die man damit designt, auch für Perlprogramme verwenden.
When C++ is your hammer, every problem looks like your thumb.
IceRage
 2008-12-13 17:56
#117180 #117180
User since
2008-09-07
93 Artikel
BenutzerIn
[default_avatar]
Also ich vermute mal, die Frage soll eher rethorisch gemeint sein, und darauf hinweisen, dass ich evtl. im falschen Forum poste, falls nicht, schadet es vielleicht nicht, wenn ich trotzdem kurz etwas inhaltliches dazu sage...

Also glade-2 ist ein Tool zum Gestalten von Oberflächen, unter anderem eben auch für Perl-Anwendungen. Dabei wird das Gtk2 Toolkit verwendet. Es muss nicht zwingend in Perl gecodet werden, es sind auch verschiedene andere Sprachen, über die Code-Export Funktion aus glade-2 verfügbar .. C beispielsweise. Der generierte Code bezieht sich lediglich auf die Gestaltung der Oberfläche. Signale, also Events müssen dann im eigenen Code hinterlegt werden, und die logik ebenso. Die Steuerelemente sind dann aus dem eigenen Code erreichbar.

Insofern würde ich sagen, dass glade-2 zwar nicht direkt ein Perlprogramm ist. Da es sich allerdings zur Oberflächengestaltung, und in diesem Punkt in Verbindung mit Perl gut nutzen lässt, halte ich es für angebracht, das Posting in diesen Themenbereich einzuordnen.


Gruß, IceRage
GwenDragon
 2008-12-13 17:57
#117181 #117181
User since
2005-01-17
14747 Artikel
Admin1
[Homepage]
user image
Ich habe mal den Titel erweitert

Da es weder ein Perl-Modul ist noch mit wxPerl oder Perl/Tk bzw. Perl/GTK zu tun hat, gehört es eigentlich hier nicht hin.
Denn in http://board.perl-community.de/thread/4631/#MSG1 ist nachzulesen, wofür der Thread ist.

Ich verschiebe mal.
topeg
 2008-12-13 18:11
#117183 #117183
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Die einfachste Variante ist aus dem XML (Dateiname, oder übergebener String) einen neuen GtkObjektBaum zu erzeugen. Man man ja den Namen des Elements angeben, das als Root gelten soll.
Code (perl): (dl )
my $widget=Gtk2::GladeXML->new('xy.glade','bla')->get_widget('bla');
IceRage
 2008-12-13 18:14
#117185 #117185
User since
2008-09-07
93 Artikel
BenutzerIn
[default_avatar]
Da war schon jemand schneller ^^ .. egal, passt ja trotzdem noch.

@murphy
ich würde gern nicht nur den jeweils aktuellen datensatz anzeigen. es ist so das ich eine anzahl von datensätzen, in einer SimpleList habe, und dort eine auswahl treffe. die anzahl der in der auswahl enthaltenen datensätze kann dabei variabel sein. dann sollten die ausgewählten datensätze, in immer der gleichen stuktur, also aufbau der steuerelemente, beispielsweise: 2 textfelder, 6 checkboxen usw ... angezeigt werden. allerdings gibt es dabei keinen "jeweils aktuellen" datensatz, sondern eben nur eine auswahl von datensätzen, die alle samt angezeigt werden sollen, in je einem eigenen container.

bin mir da jetzt nicht ganz sicher, ob das wirklich richtig angekommen ist. zumindest kann ich aus diesem grund nicht immer nur einen einzigen datensatz, an einen satz von steuerelementen binden. und selbst wenn ich dies mit jeweils dem ersten datensatz machen könnte, dann hätte ich keine steuerelemente für den 2ten, 3ten usw ... datensatz.

ist schade das es da keine clone methode gibt. dachte mir allerdings schon so etwas. schließlich müssten ja dann die gesamten bezeichner, der einzellnen steuerelemente passend geändert werden. denn wenn im ausgangscontainer bereits eine checkbox1 enthalten ist, dann dürfte sie im geclonten container ja nicht mehr vorkommen, bzw. müsste anders heißen usw ...

also ich denke mal, ich werde die steuerelemente dynamisch erstellen, und anordnen müssen .. werde ich wohl nicht drum rumkommen ^^. den bezeichnern kann ich ja dann einfach einen laufenden index mitgeben, oder so etwas. und dann vielleicht eine globale variable, die mit der absoluten anzahl an datensätzen gefüllt ist, zum wiederauslesen innerhalb einer weitern schleife.

aber vielleicht gibts da ja noch etwas besseres, dass ich noch nicht kenne.

Gruß, IceRage
murphy
 2008-12-13 18:22
#117188 #117188
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
@IceRange: In dem Falle ist es wohl wirklich das beste, von Glade die Steuerelemente einfach mehrfach instantiieren zu lassen, so wie topeg das vorschlägt.
When C++ is your hammer, every problem looks like your thumb.
IceRage
 2008-12-13 18:24
#117189 #117189
User since
2008-09-07
93 Artikel
BenutzerIn
[default_avatar]
ja das ist ein super vorschlag, bin grad noch dabei das auszuprobieren. wäre ja perfekt, wenn das ginge.
IceRage
 2008-12-13 19:24
#117197 #117197
User since
2008-09-07
93 Artikel
BenutzerIn
[default_avatar]
Also mit dem Befehl kann ich wohl die gewünschte vbox instanziieren, aber dem selben scrolledwindow zuordnen geht irgendwie nicht.

Code (perl): (dl )
1
2
my $widget=Gtk2::GladeXML->new('iceshaped','vbox6')->get_widget('vbox6');
$scrolledwindow->add($widget);


Einem anderen Fenster kann ich $widget zuordnen, aber eben nicht dem selben $scrolledwindow, was aber wichtig wäre.

Ich habe es schon mal mit $widget->set_name('anderername') versucht, ging aber auch nicht.

Ist das denn möglich, $widget dem übergeordneten container zu zuweisen, aus dem es "stammt?
<< |< 1 2 >| >> 17 Einträge, 2 Seiten



View all threads created 2008-12-13 17:36.