Ich versuche, eine bearbeitbare Tabelle in PyQt erstellen. Hier ist der Code für die nur die Tabelle anzeigt:Bearbeiten Tabelle in Pyqt mit QAbstractTableModel
import sys
from PyQt4 import QtGui, QtCore
from PyQt4.QtCore import *
from PyQt4.QtGui import *
# données à représenter
my_array = [['00','01','02'],
['10','11','12'],
['20','21','22']]
def main():
app = QApplication(sys.argv)
w = MyWindow()
w.show()
sys.exit(app.exec_())
# création de la vue et du conteneur
class MyWindow(QWidget):
def __init__(self, *args):
QWidget.__init__(self, *args)
tablemodel = MyTableModel(my_array, self)
tableview = QTableView()
tableview.setModel(tablemodel)
layout = QVBoxLayout(self)
layout.addWidget(tableview)
self.setLayout(layout)
# création du modèle
class MyTableModel(QAbstractTableModel):
def __init__(self, datain, parent = None, *args):
QAbstractTableModel.__init__(self, parent, *args)
self.arraydata = datain
def rowCount(self, parent):
return len(self.arraydata)
def columnCount(self, parent):
return len(self.arraydata[0])
def data(self, index, role):
if not index.isValid():
return None
elif role != Qt.DisplayRole:
return None
return (self.arraydata[index.row()][index.column()])
"""
def setData(self, index, value):
self.arraydata[index.row()][index.column()] = value
return True
def flags(self, index):
return Qt.ItemIsEditable
"""
if __name__ == "__main__":
main()
Wenn ich die Methode implementieren setData
und flags
, dass alle Einzelteile sind nicht einmal wählbar ... Was ist die Lösung tha Tabelle bearbeitbar zu machen? Dank
Dies funktioniert zurückgeben müssen. Sie können auch die bereits vorhandenen Flags mit dem 'ItemIsEditable' Flag:' QtCore.QAbstractTableModel.flags (self, index) | QtCore.Qt.ItemIsEditable' – neuronet
Ich habe Ihren Code versucht. Um zu arbeiten, musste ich ** def setData (self, index, value) ** auf ** def setData (self, index, value, role) ** ändern. –