Forum: PC-Programmierung TreeWidget mit pyQT zur Laufzeit füllen


von Dennis S. (eltio)


Angehängte Dateien:

Lesenswert?

Hallo zusammen!

Folgende Situation:
ich habe mit dem Qt Designer eine Oberfläche mit einem TreeWidget 
erstellt. Diese kann ich wie folgt aufrufen:
1
import sys
2
from PyQt4 import QtCore, QtGui, uic
3
4
form_class = uic.loadUiType("MainWindow.ui")[0]  
5
6
class MainWindow(QtGui.QMainWindow, form_class):
7
    def __init__(self, parent=None):
8
        QtGui.QMainWindow.__init__(self, parent)
9
        self.setupUi(self)
10
11
app = QtGui.QApplication(sys.argv)
12
myWindow = MainWindow(None)
13
myWindow.show()
14
app.exec_()

Desweiteren habe ich ein Beispiel für das Füllen des Widget zur 
Laufzeit:
1
from PyQt4 import QtCore, QtGui
2
import sys
3
4
app = QtGui.QApplication(sys.argv)
5
QtGui.qApp = app
6
7
pointListBox = QtGui.QTreeWidget()
8
9
header=QtGui.QTreeWidgetItem(["Tree","First","secondo"])
10
#...
11
pointListBox.setHeaderItem(header)   #Another alternative is setHeaderLabels(["Tree","First",...])
12
13
root = QtGui.QTreeWidgetItem(pointListBox, ["root"])
14
A = QtGui.QTreeWidgetItem(root, ["A"])
15
barA = QtGui.QTreeWidgetItem(A)
16
barA.setText(0,"bar")
17
barA.setText(1,"i")
18
barA.setText(2,"ii")
19
bazA = QtGui.QTreeWidgetItem(A, ["baz", "a", "b"])
20
21
pointListBox.show()
22
sys.exit(app.exec_())

Das Problem: wie verbinde ich diese beiden Codeschnippsel? Ich möchte 
die Oberfläche mit dem Qt Designer erstellen und mir eine Funktion 
schreiben, die das Ganze zur Laufzeit (also zum Beispiel Button-Klick) 
füllt. Meine Versuche endeten immer damit, dass irgendwelche globalen 
Variablen nicht bekannt waren.

Der Part mit den Buttons ist erstmal unwichtig. Mir geht es um das 
richtige Ansprechen des TreeWidget.

Vielen Dank.

Gruß
Dennis

von rs (Gast)


Lesenswert?

Dennis S. schrieb:
> Meine Versuche endeten immer damit, dass irgendwelche globalen
> Variablen nicht bekannt waren.

klingt nach vergessenem "self." vor der variable.

von Dennis S. (eltio)


Lesenswert?

Okay, hier mal ein kleines Beispiel:
1
import sys
2
from PyQt4 import QtCore, QtGui, uic
3
4
form_class = uic.loadUiType("MainWindow.ui")[0]  
5
6
def fillTreeWidget():
7
    root = MainWindow.treeEntries(pointListBox, ["root"])
8
    A = QtGui.QTreeWidgetItem(root, ["A"])
9
    barA = QtGui.QTreeWidgetItem(A)
10
    barA.setText(0,"bar")
11
    barA.setText(1,"i")
12
    barA.setText(2,"ii")
13
    bazA = QtGui.QTreeWidgetItem(A, ["baz", "a", "b"])
14
15
class MainWindow(QtGui.QMainWindow, form_class):
16
    def __init__(self, parent=None):
17
        QtGui.QMainWindow.__init__(self, parent)
18
        self.setupUi(self)
19
20
if __name__ == "__main__":
21
    app = QtGui.QApplication(sys.argv)
22
    myWindow = MainWindow(None)
23
    myWindow.show()
24
25
    fillTreeWidget()
26
27
    app.exec_()

Die Fehlermeldung ist:
AttributeError: type object 'MainWindow' has no attribute 'treeEntries'

Gruß
Dennis

von Rolf M. (rmagnus)


Lesenswert?

Dennis S. schrieb:
> Die Fehlermeldung ist:
> AttributeError: type object 'MainWindow' has no attribute 'treeEntries'

Jo, und warum wundert dich das jetzt? Hier rufst du diese ominöse 
Funktion auf:

> def fillTreeWidget():
>     root = MainWindow.treeEntries(pointListBox, ["root"])

und sie wird nirgendes definiert.

von Dennis S. (eltio)


Lesenswert?

Stimmt natürlich! FacePalm

Aber auch folgendes bricht mit der Meldung "AttributeError: type object 
'MainWindow' has no attribute 'treeEntries'" ab. Wie kann ich auf die 
Widgets zugreifen?
1
import sys
2
from PyQt4 import QtCore, QtGui, uic
3
4
form_class = uic.loadUiType("MainWindow.ui")[0]  
5
6
def fillTreeWidget():
7
    header=QtGui.QTreeWidgetItem(["Tree","First","secondo"])
8
    MainWindow.treeEntries.setHeaderItem(header)
9
10
class MainWindow(QtGui.QMainWindow, form_class):
11
    def __init__(self, parent=None):
12
        QtGui.QMainWindow.__init__(self, parent)
13
        self.setupUi(self)
14
15
if __name__ == "__main__":
16
    app = QtGui.QApplication(sys.argv)
17
    myWindow = MainWindow(None)
18
    myWindow.show()
19
20
    fillTreeWidget()
21
22
    app.exec_()

Danke und Gruß,
Dennis

von Tom (Gast)


Lesenswert?

Ist Dir der Unterscheid zwischen Objekt und Klasse klar? myWindow hat 
das Attribut treeEntries...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.