我试图在我的应用程序中实现“拖放”,但是dropEvent
从未调用目标小部件中的。
我对这个问题进行了很多搜索,但是发现的每个解决方案都涉及到Override dragMoveEvent
,这是我做的,但没有任何区别。
由于上述原因,我的示例代码也不起作用:
主窗口类:
class Win(QtWidgets.QWidget):
def __init__(self):
super(Win, self).__init__()
self.setGeometry(200, 300, 400, 200)
self.setLayout(QtWidgets.QHBoxLayout())
self.layout().addWidget(DragLabel())
self.layout().addWidget(DropTest())
标签拖动:
class DragLabel(QtWidgets.QLabel):
def __init__(self):
super(DragLabel, self).__init__()
self.setText("Drag me")
def mouseMoveEvent(self, e):
if e.buttons() != QtCore.Qt.LeftButton:
return
mimeData = QtCore.QMimeData()
mimeData.setText("Test drop")
drag = QtGui.QDrag(self)
drag.setMimeData(mimeData)
dropAction = drag.exec(QtCore.Qt.CopyAction)
小部件放到:
class DropTest(QtWidgets.QWidget):
def __init__(self):
super(DropTest, self).__init__()
self.setAcceptDrops(True)
def dragEnterEvent(self, e):
print("DragEnter")
e.accept()
def dragMoveEvent(self, e):
print("DragMove")
e.accept()
def dropEvent(self, e):
print("DropEvent")
position = e.pos()
print(position)
e.accept()
当我将标签拖到另一个小部件上时,我看到了dragEnterEvent
和dragMoveEvent
都被调用,但是当我实际上放下标签时,该dropEvent
函数没有任何消息。
另外,关闭窗口后,应用程序将挂起并且不会退出。
我正在Fedora 31中使用安装了DNF的PyQt 5.13.1x86_64。Python版本是3.7.5,没有virtualenv。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句