pyqt5 tablewidget拖放行
时间: 2023-10-17 22:06:48 浏览: 150
PyQt5中的TableWidget可以通过设置属性dragDropMode为QAbstractItemView.InternalMove来实现拖放行的功能。具体的步骤如下:
1. 创建一个TableWidget对象。
2. 设置TableWidget的dragDropMode属性为QAbstractItemView.InternalMove。
3. 在TableWidget中添加行和列,并填充数据。
4. 启用TableWidget的拖动功能,通过调用setDragEnabled(True)方法实现。
5. 启用TableWidget的接受拖放功能,通过调用setAcceptDrops(True)方法实现。
6. 编写dragEnterEvent和dropEvent事件处理函数,用于处理拖放操作。
示例代码如下:
```
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem
from PyQt5.QtCore import Qt
# 创建一个TableWidget对象
table_widget = QTableWidget()
# 设置TableWidget的dragDropMode属性为QAbstractItemView.InternalMove
table_widget.setDragDropMode(QTableWidget.InternalMove)
# 添加行和列,并填充数据
table_widget.setColumnCount(3)
table_widget.setRowCount(4)
table_widget.setHorizontalHeaderLabels(['Column 1', 'Column 2', 'Column 3'])
for row in range(4):
for col in range(3):
item = QTableWidgetItem(f'Item ({row}, {col})')
table_widget.setItem(row, col, item)
# 启用TableWidget的拖动功能
table_widget.setDragEnabled(True)
# 启用TableWidget的接受拖放功能
table_widget.setAcceptDrops(True)
# 编写dragEnterEvent和dropEvent事件处理函数,用于处理拖放操作
def dragEnterEvent(event):
if event.mimeData().hasFormat('application/x-qabstractitemmodeldatalist'):
event.accept()
else:
event.ignore()
def dropEvent(event):
mime_data = event.mimeData()
if mime_data.hasFormat('application/x-qabstractitemmodeldatalist'):
byte_array = mime_data.data('application/x-qabstractitemmodeldatalist')
stream = QDataStream(byte_array, QIODevice.ReadOnly)
row, col, _ = stream.readInt32(), stream.readInt32(), stream.readInt32()
item = table_widget.takeItem(row, col)
table_widget.insertRow(event.row())
table_widget.setItem(event.row(), col, item)
event.accept()
else:
event.ignore()
table_widget.dragEnterEvent = dragEnterEvent
table_widget.dropEvent = dropEvent
# 在这里可以将TableWidget添加到其他的窗口或布局中
# 启动应用程序的事件循环
app = QApplication([])
table_widget.show()
app.exec_()
```
阅读全文