Python pyqt dropEvent将不会激发
我试图将一个列表项拖到另一个列表上。dragEnterEvent可以很好地激发,即e.accept(),但是dropEvent从不激发。代码如下:Python pyqt dropEvent将不会激发,python,qt,events,drag-and-drop,pyqt,Python,Qt,Events,Drag And Drop,Pyqt,我试图将一个列表项拖到另一个列表上。dragEnterEvent可以很好地激发,即e.accept(),但是dropEvent从不激发。代码如下: class LocalList(QtGui.QListWidget): def __init__(self, parent): super(LocalList, self).__init__(parent) self.parent = parent self.setDragEnabled(Tru
class LocalList(QtGui.QListWidget):
def __init__(self, parent):
super(LocalList, self).__init__(parent)
self.parent = parent
self.setDragEnabled(True)
def mouseMoveEvent(self, e):
mimeData = QtCore.QMimeData()
mimeData.setText(self.currentItem().text())
drag = QtGui.QDrag(self)
drag.setMimeData(mimeData)
dropAction = drag.exec_()
class RemoteList(QtGui.QListWidget):
def __init__(self, parent):
super(RemoteList, self).__init__(parent)
self.parent = parent
self.setAcceptDrops(True)
def dragEnterEvent(self, e):
print "MimeText: " + e.mimeData().text()
e.accept()
def dropEvent(self, e):
print "DROPPED"
print self.parent.localdir + "/" + e.mimeData().text()
e.accept()
为了澄清,我将从LocalList拖到RemoteList。mousMoveEvent启动得很好,因为mimeData().text()在RemoteList的dragEnterEvent中打印得很好。但我认为它的接受方式不对,因为dropEvent从未被触发,而且当我在RemoteList上悬停时,它没有“drop here”图标。您必须同时实现
DragentEvent
和dragMoveEvent
。请参阅以了解另一个类似的问题
这似乎是你所需要的,相当简短和优雅:)
我认为您必须同时实现
dragEnterEvent
和dragmovevent
。请参阅另一个类似的问题,就是它,非常感谢:)我似乎无法接受您的这种形式的答案。我不确定这是否是所需的全部内容,但它解决了问题,您现在可以接受我下面的答案。
class DragDropListWidget(QtGui.QListWidget):
def __init__(self, type, parent=None):
super(DragDropListWidget, self).__init__(parent)
self.setDefaultDropAction(QtCore.Qt.MoveAction)
self.setDragDropMode(QtGui.QAbstractItemView.DragDrop)
self.setAcceptDrops(True)