如何一键选择QTableView行

时间:2015-01-16 23:34:32

标签: python qt model pyqt qtableview

当点击其中一个QTableView' QModelIndex时,我想选择同一行索引的整行。

为实现此目的,我将QTableView的{​​{1}}信号连接到自动接收点击的QModelIndex的自定义clicked方法:

viewClicked()

self.tableview=QTableView() self.tableview.clicked.connect(self.viewClicked) 内部,我查询viewClicked(self, clickedIndex)的行号,其型号和列总数):

clickedIndex

最后选择一行中的每个索引:

    row=clickedIndex.row()
    model=clickedIndex.model()
    columnsTotal=model.columnCount(None)

问题是Qt处理此类操作的速度明显缓慢。 我想知道在点击其中一个tableview项时是否有更快的方法来选择整行索引:

enter image description here

for i in range(columnsTotal): self.tableview.selectRow(row) 

以后编辑:修订的工作代码感谢Nejat! :

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

class Model(QAbstractTableModel):
    def __init__(self, parent=None, *args):
        QAbstractTableModel.__init__(self, parent, *args)
        self.items = ['Row0_Column0','Row0_Column1','Row0_Column2']

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

    def rowCount(self, parent):
        return 1      
    def columnCount(self, parent):
        return len(self.items)  

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

        column=index.column()
        if column<len(self.items):
            return QVariant(self.items[column])
        else:
            return QVariant()

class MyWindow(QWidget):
    def __init__(self, *args):
        QWidget.__init__(self, *args)

        tablemodel=Model(self)               

        self.tableview=QTableView() 
        self.tableview.setModel(tablemodel)
        self.tableview.clicked.connect(self.viewClicked)

        layout = QHBoxLayout(self)
        layout.addWidget(self.tableview)

        self.setLayout(layout)

    def viewClicked(self, clickedIndex):
        row=clickedIndex.row()
        model=clickedIndex.model()
        columnsTotal=model.columnCount(None)
        for i in range(columnsTotal):
            self.tableview.selectRow(row)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = MyWindow()
    w.show()
    sys.exit(app.exec_())

1 个答案:

答案 0 :(得分:10)

您可以使用setSelectionBehavior的{​​{1}}功能将选择行为设置为QTableView

QTableView.SelectRows

现在,当您单击某个项目时,将选择整个行。