Hallo,
weiß jemand wie ich aus einen QTableWidget den Inhalt aus einer bestimmten spalte/zeile auslesen kann?
Leider verstehe ich die PyQt Class Reference nicht (nicht wegen den englisch sondern wegen diesen blöden beispielen)
Vielleicht kann mir ja jemand 'n paar beispiel zeilen schreiben.
lg
microkernel
QTableWidget
- microkernel
- User
- Beiträge: 271
- Registriert: Mittwoch 10. Juni 2009, 17:27
- Wohnort: Frankfurt
- Kontaktdaten:
Naja, sooo schlecht ist die Doku auch nicht. Das Problem ist halt, dass die ganze Doku samt Beispielen von der C++-Doku übernommen wurden...
Zu deinem Problem: Du fütterst doch sicherlich deine QTableWidget in der Art:
Und genau so kommst du auch wieder an die Daten ran:
Das einzige, was jetzt für nen Python-Programmierer ungewohnt sein sollte ist die Klasse QVariant. In C++ kann man nicht so ohne weiteres in einer Variablen beliebige Typen abspeichern. Eine Variable ist immer fix an einen Typen gebunden. Deshalb gibt es in Qt dafür QVariant. Du weißt was da für ein Typ drinnen steckt (in unserem Fall ein String).
Diesen kriegst du mit
Schau dir auch mal die anderen DisplayRoles an. Z.B. BackgroundRole, um nen anderen Hintergrund-Brush zu setzen (gemustertes Tile z.B.), oder FontRole. Oder TooltipRole für ein Tooltip.
Zu deinem Problem: Du fütterst doch sicherlich deine QTableWidget in der Art:
Code: Alles auswählen
item = QTableWidgetItem()
item.setData( Qt.DisplayRole, "Tabellentext" )
table = QTableWidget(10,10)
table.setItem(0, 0, item)
Code: Alles auswählen
item2 = table.item(0,0)
data = item2.data(Qt.DisplayRole)
Diesen kriegst du mit
Code: Alles auswählen
stringData = data.toString()
- microkernel
- User
- Beiträge: 271
- Registriert: Mittwoch 10. Juni 2009, 17:27
- Wohnort: Frankfurt
- Kontaktdaten:
wenn ich das in mein Script einfüge kommt aber folgende Fehlermeldung:
Wo liegt das Problem?
Code: Alles auswählen
Traceback (most recent call last):
File "C:\Dokumente und Einstellungen\*********\Desktop\Datenbank Manager\Source\Add\Database Edit.pyw", line 166, in saveEdits
data = coordinates.data(Qt.DisplayRole) # Get title
AttributeError: 'module' object has no attribute 'DisplayRole'
Kommt halt drauf an wie du deine Module importierst
Ich hab halt im Beispiel oben aus reiner Faulheit das da gemacht:

Code: Alles auswählen
>>> from PyQt4 import QtCore
>>> role = QtCore.Qt.DisplayRole
Code: Alles auswählen
>>> from PyQt4.Qt import *
>>> role = Qt.DisplayRole
- microkernel
- User
- Beiträge: 271
- Registriert: Mittwoch 10. Juni 2009, 17:27
- Wohnort: Frankfurt
- Kontaktdaten:
ok.. so sieht das ganze jetzt aus:
Aber trotzdem kommt folgende Fehlermeldung:
Ich seh einfach den fehler nicht....
Code: Alles auswählen
from PyQt4 import QtCore...
.....
coordinates = self.table.item(Count_X ,Count_Y) # |
tableData = coordinates.data(QtCore.Qt.DisplayRole) # Get title
title = tableData.toString() # |
....
Code: Alles auswählen
Traceback (most recent call last):
File "C:\Dokumente und Einstellungen\*************\Desktop\Datenbank Manager\Source\Add\Database Edit.pyw", line 184, in saveEdits
reSet_Index()
File "C:\Dokumente und Einstellungen\*********\Desktop\Datenbank Manager\Source\Add\Database Edit.pyw", line 170, in reSet_Index
tableData = coordinates.data(QtCore.Qt.DisplayRole) # Get title
AttributeError: 'NoneType' object has no attribute 'data'

- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Dann schau dir nochmal franzfs Code an:
``data`` verwendet er jedenfalls nicht.
Code: Alles auswählen
item = QTableWidgetItem()
item.setData( Qt.DisplayRole, "Tabellentext" )
table = QTableWidget(10,10)
table.setItem(0, 0, item)
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
- microkernel
- User
- Beiträge: 271
- Registriert: Mittwoch 10. Juni 2009, 17:27
- Wohnort: Frankfurt
- Kontaktdaten:
irgendwie schon.....franzf hat geschrieben: Und genau so kommst du auch wieder an die Daten ran:Das einzige, was jetzt für nen Python-Programmierer ungewohnt sein sollte ist die Klasse QVariant. In C++ kann man nicht so ohne weiteres in einer Variablen beliebige Typen abspeichern. Eine Variable ist immer fix an einen Typen gebunden. Deshalb gibt es in Qt dafür QVariant. Du weißt was da für ein Typ drinnen steckt (in unserem Fall ein String).Code: Alles auswählen
item2 = table.item(0,0) data = item2.data(Qt.DisplayRole)
Diesen kriegst du mitSchau dir auch mal die anderen DisplayRoles an. Z.B. BackgroundRole, um nen anderen Hintergrund-Brush zu setzen (gemustertes Tile z.B.), oder FontRole. Oder TooltipRole für ein Tooltip.Code: Alles auswählen
stringData = data.toString()
Dann schau dir die Fehlermeldung noch mal gaaaaaanz genau an! Das Problem steht da sehr wohl.microkernel hat geschrieben:Aber trotzdem kommt folgende Fehlermeldung:Ich seh einfach den fehler nicht....Code: Alles auswählen
Traceback (most recent call last): File "C:\Dokumente und Einstellungen\*************\Desktop\Datenbank Manager\Source\Add\Database Edit.pyw", line 184, in saveEdits reSet_Index() File "C:\Dokumente und Einstellungen\*********\Desktop\Datenbank Manager\Source\Add\Database Edit.pyw", line 170, in reSet_Index tableData = coordinates.data(QtCore.Qt.DisplayRole) # Get title AttributeError: 'NoneType' object has no attribute 'data'
Kleiner Tip: Was heiß "NoneType" und wie kommt der hier zustande?
- microkernel
- User
- Beiträge: 271
- Registriert: Mittwoch 10. Juni 2009, 17:27
- Wohnort: Frankfurt
- Kontaktdaten:
sorry ich checks echt nicht... Kannst du mir nicht einfach das Problem sagen?
Der Typ "NoneType" in Python ist wohl vergleichbar mit dem "NULL" in der C/C++-Welt. Es existiert an dieser Stelle kein item. Du musst erst ein QTableWidgetItem an dieser Stelle setzen bevor du drauf zugreifen kannst!microkernel hat geschrieben:sorry ich checks echt nicht... Kannst du mir nicht einfach das Problem sagen?
- microkernel
- User
- Beiträge: 271
- Registriert: Mittwoch 10. Juni 2009, 17:27
- Wohnort: Frankfurt
- Kontaktdaten:
aaaahhh... sorry. Hätte ich eigentlich wissen müssen.
Vielen Dank
!
Vielen Dank
