【问题标题】:how to retrieve the selected row of a QTableView?如何检索 QTableView 的选定行?
【发布时间】:2014-04-29 21:59:36
【问题描述】:

我正在使用 QTableView 对象类型。这个对象包含几个在线,我用这个模型:

class PaletteTableModel(QtCore.QAbstractTableModel):
    def __init__(self,colors = [[]],headers =[],parent=None):
        QtCore.QAbstractTableModel.__init__(self, parent)
        self.__colors=colors
        self._headers=headers

    def rowCount(self,parent): 
        return len(self.__colors)

    def columnCount(self,parent):
        return 6        

    def headerData(self,section,orientation,role):
        if role==QtCore.Qt.DisplayRole:
            if orientation==QtCore.Qt.Horizontal:
                return self._headers[section]  
            else:
                return QtCore.QString("Credit %1").arg(section+1) 

    def data(self,index,role):
        if role==QtCore.Qt.ToolTipRole:
            row=index.row
            return "Crédit"
        if role==QtCore.Qt.EditRole:
            row=index.row()
            column=index.column()
            return self.__colors[row][column]
        if role==QtCore.Qt.DisplayRole:
            row=index.row()
            column=index.column()
            value=self.__colors[row][column]
            return value  

    def setData(self,index,value,role=QtCore.Qt.EditRole):
        if role==QtCore.Qt.EditRole:
            row =index.row()
            column=index.column()
            ch=(value)

            self.__colors[row][column]=ch
            self.dataChanged.emit(index,index)
            return True

    def flags(self, index):
        return QtCore.Qt.ItemIsEnabled|QtCore.Qt.ItemIsEditable|QtCore.Qt.ItemIsSelectable

我想检索此 tableView 的选定行。任何人请帮助我,如果可能的话,我想要一个 python 代码

【问题讨论】:

标签: python python-2.7 pyqt pyqt4 qtableview


【解决方案1】:

这取决于您所说的“选定行”是什么意思。默认情况下,QTableViewselection mode 设置为 ExtendedSelectionselection behavior 设置为 SelectItems。这意味着可以同时选择不同行和列中的多个单独的表格单元格。那么哪一个应该算作“选中的”行呢?

table-view 的selection model 有一个selectedRows 方法,它将返回选择所有列 的行的索引列表(即当您单击一行的标题部分):

    indexes = table.selectionModel().selectedRows()
    for index in sorted(indexes):
        print('Row %d is selected' % index.row())

不过,如果你想获取至少一个单元格被选中的所有行,你可以使用selectedIndexes方法:

    rows = sorted(set(index.row() for index in
                      self.table.selectedIndexes()))
    for row in rows:
        print('Row %d is selected' % row)

【讨论】:

    【解决方案2】:

    您可以用来检索所选行的方法之一是:

    tableView = QtGui.QTableView()
    tableModel = PaletteTableModel()   
    tableView.setModel(tableModel)
    
    x = tableView.selectedIndexes ()
    

    "tableView.selectedIndexes ()" 返回一个 QModelIndex 的列表

    【讨论】:

      【解决方案3】:

      在我的情况下,我将此操作用于在 doubleClicked 事件中调用的函数,如下所示: 我将此行代码添加到init函数中

      self.tableSusAmigos.doubleClicked.connect(self.doubleClicked_table)
      

      之后我这样声明 doubleClicked_table:

      def doubleClicked_table(self):
          index = self.tableSusAmigos.selectedIndexes()[0]
          id_us = int(self.tableSusAmigos.model().data(index).toString())
          print ("index : " + str(id_us)) 
      

      在这种情况下,我在第一列中显示一个 id(整数)(这就是 selectedIndexes()[0] 中数字 0 的原因)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-13
        • 2011-08-11
        • 2011-08-21
        • 1970-01-01
        • 2018-08-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多