python - pyQt QTableView 选择一组不连续的行

标签 python user-interface pyqt4

我有一个 QTableView,它是这样创建的:

    self.preset_delegate = PresetDelegate() # used to provide a combobox for making a selection from a set of options, column 0
    self.model_filelist = QtGui.QStandardItemModel()
    self.model_filelist.setHorizontalHeaderLabels(HEADER_LABELS)
    self.list_filelist = QtGui.QTableView()
    self.list_filelist.horizontalHeader().setResizeMode( QtGui.QHeaderView.Interactive )
    self.list_filelist.setItemDelegateForColumn(0, self.preset_delegate )
    self.list_filelist.setModel( self.model_filelist )
    self.list_filelist.setSelectionMode( QtGui.QAbstractItemView.ExtendedSelection )

当用户按下按钮时,我想通过算法从表中选择行。选择将不是连续的。出于我们讨论的目的,它可以是模型/表中行的任何随机子集。

这是我用来进行选择的伪代码:

    files = [str(self.model_filelist.data( self.model_filelist.index(x,1)).toString()) for x in range(self.model_filelist.rowCount())]
    self.list_filelist.clearSelection()
    for x in match_set:
       match_index = files.index( x )
       model_index = self.model_filelist.index(match_index,1) # first column is okay
       self.list_filelist.selectionModel().select( model_index, QtGui.QItemSelectionModel.Select | QtGui.QItemSelectionModel.Current )

我的问题是最后一行的选择模型标志。我是否使用 SelectCurrent、ToggleCurrent 还是 Select |当前或切换|目前,我只在循环结束时获取 match_set 中剩余的最后一项。当循环执行时,选择更改从一项到另一项,而不是将新行添加到选择集中。我希望这是有道理的。

我确信 SelectCurrent 标志是执行此操作的方法,但它对我不起作用。有什么建议么? (python 2.6.7、Fedora 14、Qt4.4???我不能确定)

最佳答案

根据对问题的评论。我没有解决原始代码失败的原因,但我发现这是可行的:

使用采用 QItemSelection 对象的 select() 版本,并使用将 ModelIndex 包装到我感兴趣的行的 QItemSelectRange 对象加载该对象。

关于python - pyQt QTableView 选择一组不连续的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19256543/

相关文章:

python | tkinter : What does tkinter. END 做什么?

python - 可插入的Python程序

python - 在 pyqt4 中的特定小部件(透明标签)上覆盖文本

python - 如何在 anaconda 中安装 PyQt4?

c++ - 通过 C++ 在 Python 函数中传递参数

python - 使用 python ibPy 库获取你的投资组合的位置

Python切片[:] inconsistent behavior

python - 在 python 中使用递归查找列表 int 的排列时考虑索引?

html - 如何使用输入文本框内联按钮/下拉列表?

java - "paint"类似网页内的控件