2012-07-31 8 views
6

का उपयोग कर pyqt में तालिका संपादित करें मैं PyQt में एक संपादन योग्य तालिका बनाने की कोशिश कर रहा हूं। यहां केवल तालिका प्रदर्शित करने के लिए कोड है: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() 

अगर मैं विधि setData और flags लागू सभी आइटम भी चयन नहीं कर रहे हैं, ... था तालिका संपादन योग्य बनाने का हल क्या है? धन्यवाद

उत्तर

5

मैं बस, समाधान मिल गया है झंडे तरीकों मूल्य QtCore.Qt.ItemIsEditable | QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable

+3

यह काम करता है वापस जाने के लिए की जरूरत है। आप 'ItemIsEditable' ध्वज के साथ पहले से मौजूद मौजूदा झंडे भी कर सकते हैं:' QtCore.QAbstractTableModel.flags (स्वयं, अनुक्रमणिका) | QtCore.Qt.ItemIsEditable' – neuronet

+0

मैंने आपके कोड की कोशिश की। काम करने के लिए, मुझे ** def setData (self, index, value) ** को ** def setData (self, index, value, role) ** –

-1
OR Override 
Qt::ItemFlags MyTableView::flags(const QModelIndex& index) const 
{ 
    Qt::ItemFlags flags = QAbstractTableModel::flags(index); 
    flags |= Qt::ItemIsEditable; 
    return flags; 
} 
+0

को बदलने की आवश्यकता है, आपको और अधिक समझा जाना चाहिए, शब्दों का उपयोग न केवल –

+1

@bigOTHER उल्लेख नहीं है, यह कोड सी ++ में है जबकि सवाल पायथन के बारे में है। – 2mac