如何在每次点击时将鼠标点击坐标附加到QTableWidget
?我已经有QMouseEvent
来显示QLabelItem
中的坐标,但我想添加一行,其中包含每次点击的坐标。这可能吗?我知道我需要使用setItem()
,但如何将其附加到现有的鼠标点击事件?
以下是鼠标点击的事件过滤器:
def eventFilter(self, obj, event):
if obj is self.p1 and event.type() == event.GraphicsSceneMousePress:
if event.button()==Qt.LeftButton:
pos=event.scenePos()
x=((pos.x()*(2.486/96))-1)
y=(pos.y()*(10.28/512))
self.label.setText("x=%0.01f,y=%0.01f" %(x,y))
#here is where I get lost with creating an iterator to append to the table with each click
for row in range(10):
for column in range(2):
self.coordinates.setItem(row,column,(x,y))
答案 0 :(得分:1)
假设model=QTableView.model()
,您可以使用以下内容向表中添加新行:
nbrows = model.rowCount()
model.beginInsertRows(QModelIndex(),nbrows,nbrows)
item = QStandardItem("({0},{1})".format(x,y))
model.insertRow(nbrows, item.index())
model.endInsertRows()
如果您有QTableWidget
而不是QTableView
,则可以使用相同的MO:
self.insertRow(self.rowCount())
.setItem
方法修改最后一行的数据。您可以使用例如QTableWidgetItem("({0},{1})".format(x,y))
或您喜欢的任何字符串来表示您的坐标元组。但是,我建议您开始使用QTableView
而不是QTableWidget
,因为它提供了更大的灵活性。
答案 1 :(得分:1)
假设您有x,y
值的双列表格,并且您希望每次点击都附加一个新行:
def eventFilter(self, obj, event):
if obj is self.p1 and event.type() == event.GraphicsSceneMousePress:
if event.button() == Qt.LeftButton:
pos = event.scenePos()
x = QtGui.QTableWidgetItem(
'%0.01f' % ((pos.x() * 2.486 / 96) - 1))
y = QtGui.QTableWidgetItem(
'%0.01f' % (pos.y() * 10.28 / 512))
row = self.coordinates.rowCount()
self.coordinates.insertRow(row)
self.coordinates.setItem(row, 0, x)
self.coordinates.setItem(row, 1, y)