TreeWidget mit pyQT zur Laufzeit füllen

OP #3901523
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
Angehängte Dateien:
OP #3901592
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
OP #3902842
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.