我有一个包含多行和多列的简单QTableWidget
。用户可以每次选择同一列的多行单元格。 (他们一次只能在同一列中选择单元格)
这样的事情:
我想检测一下,
开始行号
结束行号,
mouse release
上的选择的列号。
我认为我的问题有2个部分,
首先是检测mouse release
事件。但在查看文档后,我找不到mouse release event
。我只能看到Cellclicked
,Cellchanged
等等。那么,如何在QTableWidget
中检测鼠标释放事件?
其次是获取Row
和Column
个选项。我发现有一个名为selectedIndexes()
的函数可以帮助我获取索引。像这样:
for item in self.calendar.selectedIndexes():
print item.row(),item.column()
但我不确定这是否是正确的方法。我想要的只是检查选择开始和结束的哪一行,以及选择所在的列。有什么好办法吗?
答案 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']
我想您可以根据需要使用返回的数据。