| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

19-12-2011, 18:07
|
|
Malachite
Registrierter Benutzer
|
|
Registriert seit: Aug 2011
Beiträge: 47
|
|
PHP-GTK - Auf Kindelemente zugreifen?
Moin,
ich befasse mich gerade mit PHP-GTK. Jetzt habe ich aber folgendes Problem:
Wenn ich z.B. eine Struktur wie diese habe:
Code:
GtkWindow (id: mainWindow)
|----GtkVBox (id: mainContainer)
|----GtkTreeView (id: mainList)
|----GtkHButtonBox(id: mainButtons)
aber nur ein Objekt für mainWindow, nicht für mainList (z.B. weil die Oberfläche aus Glade importiert wurde), wie kann ich dann auf mainList zugreifen?
|

19-12-2011, 22:18
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Hallo,
mit get_child() kannst du das (einzige) Kind von einem GtkWindow abrufen. Bei dir sieht es aus, als hätte das Fenster zwei Kinder, aber das kann nicht stimmen, vermutlich gehört die GtkHButtonBox in die GtkVBox rein. Von der GtkVBox kannst du get_children() aufrufen, um auf die Kinder zuzugreifen.
In der Doku sind Methoden, die aus Elternklassen geerbt wurden, nicht explizit bei den Kindklassen gelistet. Wenn du also die Methoden bei GtkWindow nicht findest, musst du weiter hoch zu GtkBin gehen.
Gruß,
Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

20-12-2011, 10:55
|
|
Malachite
Registrierter Benutzer
|
|
Registriert seit: Aug 2011
Beiträge: 47
|
|
get_children() kenne ich schon, ich meinte eigentlich, ob ich per ID auf das Widget zugreifen kann, so in etwa:
PHP-Code:
$childWidget = $parentWidget->funktionDieEinWidgetAnhandDerIdSuchtUndEinObjektDesWidgetsZurückgibt('child');
Sonst muss ich bei jedem Kind überprüfen, ob die ID richtig ist.
Geändert von Malachite (20-12-2011 um 10:58 Uhr)
|

20-12-2011, 12:53
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

20-12-2011, 14:13
|
|
Malachite
Registrierter Benutzer
|
|
Registriert seit: Aug 2011
Beiträge: 47
|
|
Das geht aber nur mit GladeXML-Objekten, nicht mit GtkContainern.
So wie es aussieht, muss ich also doch mit foreach, is_a und isset herumhantieren.
Trotzdem danke…
|

20-12-2011, 14:36
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Zitat:
Zitat von Malachite
Das geht aber nur mit GladeXML-Objekten, nicht mit GtkContainern.
|
Umpfh, sagtest du nicht eingangs, dass es aus Glade importiert ist? Wie hast du es denn importiert – mit GladeXML? Na dann hast du auch die get_widget-Methode an deinem GladeXML-Objekt dran.
GladeXML hat mit GtkContainern überhaupt nichts zu tun. Es dient lediglich als Fassade. Eine GladeXML-Instanz erlaubt dir das Laden einer Glade-Datei und das Auffinden ihrer Widgets über get_widget.
Anstatt den GtkContainer nach einem Kind mit einer bestimmten ID zu fragen, frag einfach deine GladeXML-Instanz. Da IDs eindeutig sind, kommt genau das Kind des GtkContainers heraus, nach dem du gesucht hast.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

20-12-2011, 15:02
|
|
Malachite
Registrierter Benutzer
|
|
Registriert seit: Aug 2011
Beiträge: 47
|
|
Zitat:
Zitat von AmicaNoctis
Umpfh, sagtest du nicht eingangs, dass es aus Glade importiert ist?
|
Ich hab als Beispiel Glade-Dateien genannt. Ich arbeite manchmal mit Glade, manchmal auch nicht.
|

21-12-2011, 18:15
|
|
Malachite
Registrierter Benutzer
|
|
Registriert seit: Aug 2011
Beiträge: 47
|
|
Da es offenbar keine Funktion gibt, um Kindelemente per ID zu steuern, habe ich sie mir selbst geschrieben. Sie gibt das Objekt des gesuchten Widgets zurück:
PHP-Code:
function getWidget($obj,$id) { if ((!is_subclass_of($obj,'GtkContainer'))) { return null; } elseif ($obj->name == $id) { return $obj; } else { foreach ($obj->get_children() as $child) { if ($child->name == $id) { return $child; } elseif ($cchild = getWidget($child,$id)) { return $cchild; } else { return false; } } } }
$obj: Das Objekt, das durchsucht werden soll
$id: Die ID des gesuchten Objekts
Geändert von Malachite (21-12-2011 um 18:18 Uhr)
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|