所选单元格的行号和列号
Row and Column numbers of selected cells
背景:
我有一个包含多行和多列的简单 QTableWidget
。用户每次可以 select 同一列中的多行单元格。 (他们一次只能 select 同一列中的单元格)
像这样:
Objective:
我想检测,
起始行号
结束行号,并且
在 mouse release
上生成的 selection 的列号。
我的尝试:
我认为我的问题有两个部分,
首先是检测mouse release
事件。但是在查看文档后,我找不到 mouse release event
。我只能看到 Cellclicked
、Cellchanged
等。那么,如何检测 QTableWidget
中的鼠标释放事件?
其次是获取selections.I的Row
和Column
个数,发现有个叫selectedIndexes()
的函数帮我得到了指标。像这样:
for item in self.calendar.selectedIndexes():
print item.row(),item.column()
但我不确定这样做是否正确。我只想检查 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']
我想你可以根据需要使用返回的数据。
背景:
我有一个包含多行和多列的简单 QTableWidget
。用户每次可以 select 同一列中的多行单元格。 (他们一次只能 select 同一列中的单元格)
像这样:
Objective:
我想检测,
起始行号
结束行号,并且
在
mouse release
上生成的 selection 的列号。
我的尝试:
我认为我的问题有两个部分,
首先是检测
mouse release
事件。但是在查看文档后,我找不到mouse release event
。我只能看到Cellclicked
、Cellchanged
等。那么,如何检测QTableWidget
中的鼠标释放事件?其次是获取selections.I的
Row
和Column
个数,发现有个叫selectedIndexes()
的函数帮我得到了指标。像这样:for item in self.calendar.selectedIndexes(): print item.row(),item.column()
但我不确定这样做是否正确。我只想检查 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']
我想你可以根据需要使用返回的数据。