pyqt5 Tablewidget 拖拽
时间: 2023-10-25 19:10:15 浏览: 270
PyQt5中的QTableWidget支持拖放操作。拖放操作包括将表格中的行或单元格拖动到其他位置或拖动到其他应用程序中。
以下是一个简单的示例,演示如何在QTableWidget中实现拖放操作:
```python
import sys
from PyQt5.QtWidgets import QApplication, QTableWidget, QTableWidgetItem
from PyQt5.QtCore import Qt
class TableWidget(QTableWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.setRowCount(4)
self.setColumnCount(2)
self.setHorizontalHeaderLabels(['Name', 'Age'])
for row in range(4):
name = QTableWidgetItem('Name {}'.format(row))
age = QTableWidgetItem(str(row))
self.setItem(row, 0, name)
self.setItem(row, 1, age)
self.setDragEnabled(True)
self.setDragDropMode(QTableWidget.InternalMove)
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.startDrag(event)
def startDrag(self, event):
index = self.currentIndex()
item = self.item(index.row(), index.column())
if item is not None:
drag = Qt.QDrag(self)
mimeData = Qt.QMimeData()
mimeData.setText(item.text())
drag.setMimeData(mimeData)
drag.exec_(Qt.MoveAction)
if __name__ == '__main__':
app = QApplication(sys.argv)
table = TableWidget()
table.show()
sys.exit(app.exec_())
```
在这个示例中,我们创建了一个QTableWidget,在表格中添加了一些行和列,并启用了拖放操作。我们通过实现mousePressEvent和startDrag方法来处理拖放操作。当鼠标左键按下时,我们调用startDrag方法开始拖拽操作。在startDrag方法中,我们获取当前单元格的文本,并将其设置为QMimeData的文本数据。然后,我们创建一个QDrag对象,并将QMimeData设置为其数据。最后,我们调用drag.exec_()方法启动拖动操作。
在上面的示例中,我们使用了QTableWidget.InternalMove拖放模式,这意味着我们可以在表格中移动行和单元格。如果您想要拖动到其他应用程序中,则可以使用QTableWidget.DragDrop模式。在这种模式下,您还需要实现dragEnterEvent和dropEvent方法来处理拖放操作。
阅读全文