Frame in Frame mit GTK

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
Gast

Donnerstag 27. Januar 2005, 20:36

Hallo alle zusammen,
ich hätte mal ne kurze Frage, und zwar hab ich in Glade 2 'Windows' erstellt, im einen Window ist ein Frame mit einer GtkVBox.
In diese Box möchte ich nun das zweite Windows einfügen.
Das Window komplett ergibt einen Absturz, dann habe ich mir die GtkVBox vom zweiten Window geschnappt und eingebunden.
Nun wird alles angezeigt aber ich kann irendwie nicht auf die dortige textview, etc zugreifen.

wenn ich nun folgendes aufrufe:

Code: Alles auswählen


tf = self.view['textView1']
print tf

dann druckte er folgendes Ergebnis:

$> None
wenn ich die VBox ausdrucken lasse:

Code: Alles auswählen


vb = self.view['vBox1']
print vb

$> <gtk.VBox object (GtkVBox) at 0x40cf684c>

Die VBox ist im Hauptwindow, die Textbox im Window das ich einbinden möchten.

Ich habe schon nach embedded gesucht aber nichts hilfreiches gefunden.

Hat vieleicht jemand eine Idee oder Lösung.
Bin neu in Python. Danke
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Donnerstag 27. Januar 2005, 21:11

Hi Gast,

versuch mal folgendes:

Code: Alles auswählen

vb = self.view['vBox1']['textView1']
is nicht getestet und nur so eine Idee, da ich auf die Widgets immer über das Gladeinterface zugreife.


Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
Gast

Freitag 28. Januar 2005, 07:55

Hi Dookie
da bekomme ich dann folgenden Fehler:

Code: Alles auswählen

vb = self.view['vBox1']['textview1']
TypeError: unsubscriptable object
Hier ist mal die Funktion wie ich versuch die beiden Fenster zusammen zu legen:

Code: Alles auswählen

def create_frames(self, button, frametitle="", framename=None):
        if not framename:
            print "Fehler"
        else:
            if self.childshow:
                self.view['vBox1'].remove(self.childshow)
                self.childshow = None
            xml = gtk.glade.XML('main.glade', framename)
            iframe = xml.get_widget(framename)
            self.view['internerFrame'].set_label(frametitle)
            self.view['vBox1'].add(iframe)
            iframe.realize()
            iframe.show()
            self.childshow = iframe
        return "OK"
die Funktion rufe ich dann z.B. mit:

Code: Alles auswählen

def on_toolbutton_clicked(self, button):
        buttonname = button.get_name()
        if buttonname == "dataBrowser":
            frametitle = "Test, Window2 in Window1"
            framename = "vBox2"
            doframe = self.create_frames(button, frametitle, framename)
auf.
Vieleicht habe ich da einen Fehler. Beide Fenster sind in der main.glade vorhanden aber als eigenständige Fenster

Danke
Ruben
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Freitag 28. Januar 2005, 16:36

Hi nochmal,

warum machst du aus iframe nicht einfach self.iframe? Dann sollte der Zugriff kein problem darstellen (eventuell in der __init__ methode erstmal das self.iframe auf None setzen und vor dem Zugriff testen)


Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
Gast

Freitag 28. Januar 2005, 18:57

Danke,
nun kann ich auf vBox1 zugreifen, aber auf das Textview in vBox1 das an Platz 1 steht nicht, ebenfalls auf die Toolbar nicht die in vBox1 auf Platz 0 steht.
Ich denke das das wahrscheinlich auch nicht geht, ein komplettes Paket einzubinden.

Auf Grund Deines guten Tipps, dachte ich an folgende Lösung, was hält Ihr davon:

Mit glade mehrere Fenster erstellen, jedes Fenster hat nur ein Child drin, z.B. textview ...
Dann eine vBox aus window1 einbinden, dort in Platz 0 die Toolbar aus window2 usw.

Oder ist es möglich andere Frames mit glade zu erstellen, als nur windows und dann den rest einzubinden.
Ich habe langsam den Eindruck dass QT mich ganz kräftig verwöhnt hat :)
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Freitag 28. Januar 2005, 19:12

Hi nochmal,

also irgendwie ist mir deine Vorgehensweise nicht schlüssig. Warum für jedes widget ein extra window? Klick dir deine GUI mit Glade zusammen und setzte bei manchen Widgets die Sichtbarkeit/Anzeige auf False wenn du sie nicht oder erst später brauchst.
So wie du das machst, bist du warscheinlich besser dran die Widgets direkt in Python zu definieren.


Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
Gast

Freitag 28. Januar 2005, 20:32

Irgendwie steh ich gerade auf dem Schlauch.
Das hört sich einfach an, aber ich versuche mit dem Projekt Glade mit Python zu lernen.

Also wenn ich eine vBox erstelle und dort ein textview reinklicke, später im Programm will ich das mit einer Tabelle ersetzen, also muss eine unsichtbare Tabelle rein, aber in dem Moment meckert Glade und last es nicht rein.

Gibt es irgendwo eine Glade Anleitung für Dummy??

Danke
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 28. Januar 2005, 20:44

Anonymous hat geschrieben:Gibt es irgendwo eine Glade Anleitung für Dummy??
Wie wäre es damit?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten