按QAbstractTableMod设置复选框

2024-09-30 04:27:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用checkbox创建第一列,并获得它的检查状态,我该怎么做?我重写了flag(),但它似乎不起作用,我确定问题出在哪里?在

我得到了这个links,但它也适用于我的代码。我不想用委托,因为它太复杂了。在

data = [['00','01','02'],
         ['10','11','12'],
         ['20','21','22']]

class MainWindow(QWidget):
    def __init__(self, parent=None, *args):
        super(MainWindow, self).__init__(parent)

        clipTableWidget = QTableWidget()
        self.model = TModel(data, self)
        clipTableView = QTableView()
        clipTableView.setModel(self.model)
        layout = QVBoxLayout()
        layout.addWidget(clipTableView)
        self.setLayout(layout)

class TModel(QAbstractTableModel):

    def __init__(self, datain, parent=None):
        super(TModel, self).__init__(parent)
        self.arraydata = datain

    def rowCount(self, parent=QModelIndex()):
        return len(self.arraydata)

    def columnCount(self, parent=QModelIndex()):
        return len(self.arraydata[0])

    def data(self, index, role):
        if not index.isValid():
            return QVariant()
        elif role != Qt.DisplayRole:
            return QVariant()
        return QVariant(self.arraydata[index.row()][index.column()])

    def flags(self, index):
        if not index.isValid():
            return QVariant()
        elif index.column() == 1:
            return Qt.ItemIsSelectable|Qt.ItemIsEnabled|Qt.ItemIsUserCheckable
        return QVariant()

Tags: selfdataindexreturninitdefqtclass
1条回答
网友
1楼 · 发布于 2024-09-30 04:27:45

好的,这是你问题的解决方案。你的旗子不起作用的原因是因为那些旗子对文本不起作用,它们是为QItems设计的。在

from PyQt4.QtCore import *
from PyQt4.QtGui import *    
import sys

class MainWindow(QWidget):
    def __init__(self, parent=None, *args):
        super(MainWindow, self).__init__(parent)
        data = [['00','01','02'],
         ['10','11','12'],
         ['20','21','22']]
        clipTableWidget = QTableWidget()

        self.model = QStandardItemModel(self)
        clipTableView = QTableView()
        count1=0
        for row in data:
            count2 = 0
            for column in row:
                if count2 == 0:
                    item = QStandardItem(column)
                    item.setCheckable(True)
                    item.setCheckState(False)
                    item.setFlags(Qt.ItemIsUserCheckable| Qt.ItemIsEnabled)
                    self.model.setItem(count1,count2,item)
                    count2+=1
                else:
                    item = QStandardItem(column)
                    self.model.setItem(count1,count2,item)
                    count2+=1
            count1+=1


        clipTableView.setModel(self.model)
        layout = QVBoxLayout()
        layout.addWidget(clipTableView)
        self.setLayout(layout)

def main(): 
    app = QApplication(sys.argv) 
    w = MainWindow() 
    w.show() 
    sys.exit(app.exec_()) 


if __name__ == "__main__": 
    main()    

相关问题 更多 >

    热门问题