Hey,
man kann ja mit pyQt sein GUI Layout mit einem ui - File erstellen. Wenn man es nun einbindet möchte man auf die Widgets mit Namen zugreifen, wie kann man das aber machen? Die class QObject enthält die Methode findChild, nur wie verwendet man die:
object QObject.findChild (self, type type, QString name = QString())
Was zum Geier ist denn type?
Oder kennt Ihr eine andere Methode um auf die Widgets zugreifen zu können?
grüße
findObject
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Ehrlich gesagt kapiere ich nicht so genau, was Du machen willst!
Ich kann Dir ja mal grob meine Vorgehensweise schildern, wenn ich meine GUIs nutzen will.
Annahme:
- GUI erstellt mit dem dateinamen gui.py und dem Klassennamen MeinGUI
Also eigentlich ganz einfach. Man erbt eben von der automatisch erstellen Klasse und ruft einfach zunächste dessen Konstruktor auf.
K.A. ob Dir das hilft - ich hoffe mal
Ich kann Dir ja mal grob meine Vorgehensweise schildern, wenn ich meine GUIs nutzen will.
Annahme:
- GUI erstellt mit dem dateinamen gui.py und dem Klassennamen MeinGUI
Code: Alles auswählen
from gui import MeinGUI
class MyWindow(MeinGUI):
def __init__(self, deine_parameter, *args):
apply(MeinGUI.__init__, (self,) + args)
...
K.A. ob Dir das hilft - ich hoffe mal
Verwendest du Qt3 oder Qt4? Die Art, wie man GUIs aus Designer-Dateien lädt, unterscheidet sich nämlich zwischen beiden Versionen, folglich ist diese Info von Nöten, um dir helfen zu können.
In Qt3 kannst du auf Attribute dynamisch geladener Objekte (solche, die ohne Compilierung direkt aus den XML-Beschreibungen gelesen werden) über die Methode child des Objekts zugreifen:
Das Beispiel greift auf das Objekt mit dem Namen 'textfield' zu und ruft eine Methode dieses Objekts auf. Mit ein bisschen getattr-Magie kann man diesen Zugriff auch wrappen und so die Attribute quasi "direkt" an die Klasse binden.
In Qt4 brauchst du diesen Unsinn nicht mehr, PyQt4 erzeugt die entsprechenden Attribute beim Laden der Datei selbstständig. Obiges Beispiel in Qt4 sieht so aus:
Unabhängig davon kannst du auf Attribute immer direkt über den Namen zugreifen, wenn du die UI-Dateien mit pyuic in Python-Module übersetzt.
In Qt3 kannst du auf Attribute dynamisch geladener Objekte (solche, die ohne Compilierung direkt aus den XML-Beschreibungen gelesen werden) über die Methode child des Objekts zugreifen:
Code: Alles auswählen
mein_qt_widget = MeinQtWidget()
mein_qt_widget.child('textfield').setText('Foo')
In Qt4 brauchst du diesen Unsinn nicht mehr, PyQt4 erzeugt die entsprechenden Attribute beim Laden der Datei selbstständig. Obiges Beispiel in Qt4 sieht so aus:
Code: Alles auswählen
mein_qt_widget = MeinQtWidget()
mein_qt_widget.textfield.setText('Foo')