所选单元格的行号和列号

Row and Column numbers of selected cells

背景:

我有一个包含多行和多列的简单 QTableWidget。用户每次可以 select 同一列中的多行单元格。 (他们一次只能 select 同一列中的单元格)

像这样:

Objective:

我想检测,

  1. 起始行号

  2. 结束行号,并且

  3. mouse release 上生成的 selection 的列号。

我的尝试:

我认为我的问题有两个部分,

但我不确定这样做是否正确。我只想检查 selection 在哪一行开始和结束,以及正在制作 selection 的列。有什么好的方法吗?

此代码背后的想法是创建一个自定义 QTableWidget class,它添加了一个鼠标释放事件。

from PyQt4 import QtCore, QtGui

class CustomQTableWidget(QtGui.QTableWidget):    
    def __init__(self, *args, **kwargs):
        QtGui.QTableWidget.__init__(self, *args, **kwargs)
        #Fill Qtable
        self.insertColumn (0)
        self.insertColumn (1)
        self.insertColumn (2)
        self.insertColumn (3)
        self.insertRow (0)
        self.insertRow (1)
        self.insertRow (2)
        self.insertRow (3)
        self.insertRow (4)
        self.insertRow (5)
        self.insertRow (6)

    def mouseReleaseEvent(self, event):
        if event.button() == QtCore.Qt.LeftButton: #Release event only if done with left button, you can remove if necessary

            #Your code should go here
            indexSelection = []

            for item in self.selectedIndexes(): 
                indexSelection.append( str(item.row())+ "-" + str(item.column()) )

            print indexSelection


class MyDialog(QtGui.QDialog):
    def __init__(self, parent=None):
        super(MyDialog, self).__init__(parent)

        self.tableWidget = CustomQTableWidget() #Create a custom QtableWidget
        hbox = QtGui.QHBoxLayout() #Put stuff in a layout...
        hbox.addWidget(self.tableWidget) #...
        self.setLayout(hbox) #...

if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    w = MyDialog()
    w.show()
    sys.exit(app.exec_())

释放左键时输出应该如下所示:

>>> ['1-1', '2-1', '3-1', '4-1', '5-1']

我想你可以根据需要使用返回的数据。