所选单元格的行号和列号

时间:2015-01-16 09:50:20

标签: python pyqt pyqt4 qtableview qtablewidget

背景:

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

这样的事情:

enter image description here

目的:

我想检测一下,

  1. 开始行号

  2. 结束行号,

  3. mouse release上的选择的列号。

  4. 我的尝试:

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

    • 首先是检测mouse release事件。但在查看文档后,我找不到mouse release event。我只能看到CellclickedCellchanged等等。那么,如何在QTableWidget中检测鼠标释放事件?

    • 其次是获取RowColumn个选项。我发现有一个名为selectedIndexes()的函数可以帮助我获取索引。像这样:

      for item in self.calendar.selectedIndexes():
          print item.row(),item.column()
      

    但我不确定这是否是正确的方法。我想要的只是检查选择开始和结束的哪一行,以及选择所在的列。有什么好办法吗?

1 个答案:

答案 0 :(得分:2)

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

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']

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