PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Python/Qt: Zur Laufzeit auf QWidgets zugreifen



samufi
21-12-2011, 17:27
[ich benutze Python3.0 und PyQt4]

Hallo,
ich habe eine eigentlich triviale, aber grundlegende Frage. Ich habe irgendwie noch nirgends eine Lösung gefunden, obwohl dieses Wissen eigentlich immer gebraucht wird.
Und zwar möchte ich zur Laufzeit auf ein QWidget zugreifen - beispielsweise eine ein QLineEdit. Wie kann ich seinen Inhalt, also QLineEdit().text zur Laufzeit verändern?
Ich habe z.B. eine von QWidget abgeleitete Form, erstelle darauf ein gridLayout und füge dem ein LineEdit hinzu - soweit so gut. Wenn ich jetzt aber aus anderen Methoden, die nicht die __init__ methode sind, den Text des Edits verändern will, weiß ich nicht, wie das geht.


class GrForm(QtGui.QWidget):
"""
Formular
"""
def __init__(self, parent = None):
QtGui.QWidget.__init__(self, parent)

grid = QtGui.QGridLayout()
grid.setSpacing(10)

lName = QtGui.QLabel('Gruppename')
lName.setAlignment(Qt.AlignRight)

grid.addWidget(lName, 1, 0)


self.setLayout(grid)

Ich stelle mir (inspiriert von Delphi) jetzt sowas zum Ändern des Textes vor


GrForm.grid.edit.text = "Blabla"

Aber selbst wenn ich grid als Variable in der Klasse einfüge und das Edit auch, so viele mir im Moment keine andere Variante ein, als alle Elemente im Grid mit ihren Positionen in eine Liste zu schreiben und jedes mal, wenn etwas verändert wird, alles neu zu generieren. Aber das geht doch sicher auch einfacher?! :confused:
Vielen Dank allen Helfenden!

samufi
23-12-2011, 11:01
Ich bin an der Frage gerade irgendwie am Verzweifeln, vielleicht kann mir jemand helfen, wenn ich sie anders formuliere: Ich habe eine Klasse, in der eine Form implementiert wird. Auf der Form habe ich ein Gitterlayout und in den Layout ein Element, auf das ich nun von einer anderen Methode zugreifen will:


class GrForm(QtGui.QWidget):
"""
Formular fuer die Gruppen
"""
def __init__(self, parent = None):
QtGui.QWidget.__init__(self, parent)

grid = QtGui.QGridLayout()
grid.setSpacing(10)

#[...]

self.tPersonen = QListWidget()
grid.addWidget(self.tPersonen, 3, 1)

self.setLayout(grid)

class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)

#[...]

self.setGruppenLayout()

def setGruppenLayout(self):
self.setWindowTitle("Gruppendaten eingeben")

content = GrForm()
content.tPersonen.insertItems(0, ["asd", "aasdasdsd"]) #hier ist mein Problem!
self.setCentralWidget(GrForm())

Aber nichts passiert - der Liste werden keine Einträge hinzugefügt. Was mache ich falsch? Bzw: Wie mache ich es richtig?

samufi
23-12-2011, 21:18
Nachdem ich jetzt lange verzweifelt nach der Lösung gesucht habe habe ich sie gefunden: Vorher beschriebener Code war eigentlich richtig, ich Depp habe bloß nicht mein manipuliertes "content" als CentralWidget gesetzt, sondern eine neu erzeugte Form. Alles ist also in Butter =).