Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用QabStretctTableModel在pyqt中编辑表_Python_User Interface_Pyqt4_Pyside_Qabstracttablemodel - Fatal编程技术网

Python 使用QabStretctTableModel在pyqt中编辑表

Python 使用QabStretctTableModel在pyqt中编辑表,python,user-interface,pyqt4,pyside,qabstracttablemodel,Python,User Interface,Pyqt4,Pyside,Qabstracttablemodel,我正在尝试在PyQt中创建一个可编辑的表。以下是仅显示表格的代码: 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

我正在尝试在PyQt中创建一个可编辑的表。以下是仅显示表格的代码:

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
,所有项目甚至都不可选择。。。 使该表可编辑的解决方案是什么?
谢谢

我刚刚找到了解决方案,在flags方法中,需要返回值
QtCore.Qt.ItemIsEditable | QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable

这很有效。您还可以使用
ItemIsEditable
标志来删除或删除已存在的标志:
QtCore.QAbstractTableModel.flags(self,index)| QtCore.Qt.ItemIsEditable
我尝试了您的代码。为了工作,我需要将def SEATDATA(自、索引、值)更改为def SEATDATA(自、索引、值、角色)@ BigPoor,更不用说,这个代码是C++的,问题是关于Python的。
OR Override
Qt::ItemFlags MyTableView::flags(const QModelIndex& index) const
{
    Qt::ItemFlags flags = QAbstractTableModel::flags(index);
    flags |= Qt::ItemIsEditable;
    return flags;
}