Comment extraire le contenu, résultat de selectedItems ()
-
26-10-2019 - |
Question
Le code ci-dessous produit une petite boîte de dialogue comme celui représenté, où les lignes de la table peuvent être sélectionnés (touche CTRL pour sélection multiple, ou activer / désactiver). puis en cliquant sur le bouton « OK », le contenu des sélections sont disponibles à l'aide selectedItems (). Le problème est que chaque regard « article » comme celui-ci: <PySide.QtGui.QTableWidgetItem object at 0x00FF0558>
.
Après selectedItems (), comment est le contenu extrait?
from PySide import QtGui, QtCore
class A_Dialog(QtGui.QMainWindow):
def __init__(self, parent=None):
super(A_Dialog, self).__init__(parent)
self.setupUi(self)
def setupUi(self, MainWindow):
self.buttonBox_ok_cancel = QtGui.QDialogButtonBox(MainWindow)
self.buttonBox_ok_cancel.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
QtCore.QObject.connect(self.buttonBox_ok_cancel, QtCore.SIGNAL("accepted()"), self.button_ok)
QtCore.QObject.connect(self.buttonBox_ok_cancel, QtCore.SIGNAL("rejected()"), self.button_cancel)
content = {
1: [ 'someone@gmail.com',
'Some One',
'3E0B001E'
],
2: [ 'someelse@yahoo.com',
'Some Else',
'6C8EAA39',
],
}
# Table for content
self.myTable = QtGui.QTableWidget(0, 3)
self.myTable.setHorizontalHeaderLabels(['Email','Name','ID'])
self.myTable.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
self.myTable.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
self.myTable.horizontalHeader().setStretchLastSection(True)
self.myTable.verticalHeader().setDefaultSectionSize(18) # Vertical height of rows
self.myTable.verticalHeader().setResizeMode(QtGui.QHeaderView.Fixed)
# Populate the cells
for k in content.keys():
self.myTable.insertRow( k-1 )
c = 0
for z in content[k]:
self.myTable.setItem( k-1, c, QtGui.QTableWidgetItem( z ) )
c += 1
# Auto-size
self.myTable.resizeColumnsToContents()
# A little padding on the right for each column, some room to breath, pixels.
padding = 12
for col in range(len(content[1])):
current_column_width = self.myTable.columnWidth(col)
self.myTable.setColumnWidth( col, current_column_width + padding )
self.myTable.setWordWrap(False)
self.myTable.setShowGrid(False)
self.myTable.setSortingEnabled(True)
self.myTable.setDragDropOverwriteMode(False)
self.myTable.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
horizontalLayout = QtGui.QHBoxLayout()
horizontalLayout.addWidget(self.buttonBox_ok_cancel)
verticalLayout = QtGui.QVBoxLayout()
verticalLayout.addWidget(self.myTable)
verticalLayout.addLayout(horizontalLayout)
widget = QtGui.QWidget()
widget.setLayout(verticalLayout)
self.setCentralWidget(widget)
def button_ok(self):
for item in self.myTable.selectedItems():
#for item in self.myTable.selectedIndexes():
print "MMM", item
self.close()
def button_cancel(self):
self.close()
def closeEvent(self, e):
e.accept()
if __name__ == '__main__':
app = QtGui.QApplication([])
window = A_Dialog()
window.show()
app.exec_()
La solution
Comme autre réponse dit que vous pouvez utiliser .text () méthode QTableWidgetItem pour obtenir le contenu.
Comme le montre la documentation pyside ne donne pas une indication sur le type des articles retournés qui rend plus difficile de savoir quelles méthodes utiliser. Dans ces scénarios, il est utile de vérifier documentation Qt classe lui-même pour obtenir plus de détails sur les méthodes qui seraient disponibles. Par exemple, dans votre cas, vous pouvez regarder docs Qt pour QTableWidget ce qui en fait il est plus facile de trouver les méthodes pour appeler.
Autres conseils
Appelez la méthode .text()
sur chaque QTableWidgetItem. Le seul argument au constructeur QtGui.QTableWidgetItem est cette même valeur.