findObject

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Benutzeravatar
zipdrive
User
Beiträge: 25
Registriert: Dienstag 2. Januar 2007, 20:33

Samstag 5. Januar 2008, 02:23

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
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Samstag 5. Januar 2008, 15:59

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

Code: Alles auswählen

from gui import MeinGUI

class MyWindow(MeinGUI):
	def __init__(self, deine_parameter, *args):
		apply(MeinGUI.__init__, (self,) + args)
                ...
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 ;)
Benutzeravatar
zipdrive
User
Beiträge: 25
Registriert: Dienstag 2. Januar 2007, 20:33

Mittwoch 9. Januar 2008, 18:53

Man lädt das ui und möchte doch auf dessen Elemente zugreifen. Beim DOM kann man das zb mit getElementById oder getElementByName machen und erhält die Referenz.

Versteht ihr jetzt?
lunar

Donnerstag 10. Januar 2008, 19:21

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:

Code: Alles auswählen

    mein_qt_widget = MeinQtWidget()
    mein_qt_widget.child('textfield').setText('Foo')
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:

Code: Alles auswählen

    mein_qt_widget = MeinQtWidget()
    mein_qt_widget.textfield.setText('Foo')
Unabhängig davon kannst du auf Attribute immer direkt über den Namen zugreifen, wenn du die UI-Dateien mit pyuic in Python-Module übersetzt.
Antworten