在Qtablewidget中获取鼠标点击的坐标
时间: 2024-10-09 17:13:18 浏览: 61
QTableWidget设置表头筛选(含鼠标点击事件过滤)
5星 · 资源好评率100%
在PyQt5的QTableWidget中,获取鼠标点击的坐标需要捕获`QTableWidgetClickedEvent`事件,并从事件对象中提取出鼠标的位置信息。这里有一个简单的例子:
```python
from PyQt5.QtWidgets import QApplication, QTableWidget, QTableWidgetItem, QVBoxLayout, QWidget
from PyQt5.QtCore import Qt, pyqtSignal, QEvent
class CustomTableWidgetItem(QTableWidgetItem):
clicked_signal = pyqtSignal(int, int) # 自定义信号,传递点击的行和列索引
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsUserCheckable)
def mousePressEvent(self, event):
row = self.row()
column = self.column()
self.clicked_signal.emit(row, column)
super().mousePressEvent(event) # 调用父类方法继续处理鼠标点击事件
class TableWidgetWithClickCoord(QWidget):
def __init__(self):
super().__init__()
self.table_widget = QTableWidget(10, 10) # 创建一个10x10的表格
for i in range(self.table_widget.rowCount()):
for j in range(self.table_widget.columnCount()):
item = CustomTableWidgetItem()
item.setText(f"Row {i+1} Col {j+1}")
self.table_widget.setItem(i, j, item)
layout = QVBoxLayout()
layout.addWidget(self.table_widget)
self.setLayout(layout)
self.table_widget.clicked_signal.connect(self.cell_clicked) # 绑定信号到槽函数
def cell_clicked(self, row, column):
pos = self.table_widget.mapToGlobal(QPoint(column, row)) # 获取点击位置
x = pos.x()
y = pos.y()
print(f"Cell ({row}, {column}) clicked at ({x}, {y})")
if __name__ == "__main__":
app = QApplication([])
widget = TableWidgetWithClickCoord()
widget.show()
app.exec_()
```
在这个例子中,我们自定义了`CustomTableWidgetItem`,并在其`mousePressEvent`中发送了一个信号。然后在`TableWidgetWithClickCoord`中,我们监听这个信号并计算鼠标点击的屏幕坐标。
阅读全文