背景:
我有一个带有多行和多列的简单QTableWidget
。用户可以每次在同一列中选择多行单元格。(它们只能一次在同一列中选择单元格)
就像这样:
目标:
我想探测到,
mouse release
上选择的列号。我的尝试:
我想我的问题有两个部分,
mouse release
事件。但是在翻阅了文档之后,我找不到mouse release event
。我所能看到的只有Cellclicked
,Cellchanged
等。那么,如何在QTableWidget
中检测鼠标释放事件呢?Row
和Column
数,我发现有一个名为selectedIndexes()
的函数,它帮助我获取索引。就像这样:
对于self.calendar.selectedIndexes()中的项目:打印item.row(),item.column()但我不知道这是否正确的做法。我只想检查选择开始和结束的行,再加上正在进行选择的列。有什么好办法吗?
发布于 2015-01-16 16:56:42
这段代码背后的思想是创建一个自定义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']
我想您将能够使用返回的数据,根据您的需要。
https://stackoverflow.com/questions/27981202
复制相似问题