еще попрактиковался (режими копировать/переместить):
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import sys
app = QApplication(sys.argv)
tbl = QTableWidget( 5, 5)
tbl.dragEnabled()
tbl.setDragDropMode(QAbstractItemView.DragDrop)
tbl.setDropIndicatorShown(True)
def mimeData(ar):
if tbl.currentItem()<>None:
md=QMimeData()
md.setData("myMime", "%s" % tbl.currentItem().text())
return md
tbl.mimeData=mimeData
def dropMimeData(row, column, data, action):
print "dropMime", data.data('myMime'), tbl.dropSource, tbl.dropMode
return True
tbl.dropMimeData = dropMimeData
def dragEnterEvent(event):
tbl.dropSource=event.source()
if event.format()=="myMime":
event.acceptProposedAction()
if not event.keyboardModifiers()==Qt.ControlModifier:
event.setDropAction(Qt.MoveAction)
else:
event.setDropAction(Qt.CopyAction)
tbl.dragEnterEvent=dragEnterEvent
def dragMoveEvent(event):
dragEnterEvent(event)
tbl.dragMoveEvent=dragMoveEvent
def dropEvent(event):
print "drop"
if event.dropAction()==Qt.MoveAction:
event.setDropAction(Qt.CopyAction)
tbl.dropMode="move"
QTableWidget.dropEvent(tbl, event)
else:
tbl.dropMode="copy"
QTableWidget.dropEvent(tbl, event)
event.accept()
tbl.dropEvent=dropEvent
tbl.setItem(0, 0, QTableWidgetItem(u"ggg"))
tbl.show()
app.exec_()
почему-то не вызвался dropMimeData для режима перемещения, поэтому пришлось в dropEvent извращаться
да и вот это как то мне не нравиться (но работает :) ):
tbl.dropSource=event.source()