我尝试创建一个简单的QListWidget,它接受放入其中的文本。无法工作。拖放事件甚至不会被触发,而拖动事件则是另一方面。 谁能给我指出正确的方向吗?我做错什么了?在
提前谢谢。在
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLineEdit, QLabel, QListWidget
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import pyqtSlot
class App(QWidget):
def __init__(self):
super().__init__()
self.title = 'PyQt5 drag and drop'
self.left = 500
self.top = 400
self.width = 400
self.height = 250
self.initUI()
def initUI(self):
self.setWindowTitle(self.title)
self.setGeometry(self.left, self.top, self.width, self.height)
editBox = QLineEdit('Drag this', self)
editBox.setDragEnabled(True)
editBox.move(10, 10)
editBox.resize(100,32)
listwidget = CustomLabel(self)
listwidget.move(130,15)
self.show()
class CustomLabel(QListWidget):
def __init__(self, parent):
super().__init__(parent)
self.setAcceptDrops(True)
def dragEnterEvent(self, e):
if e.mimeData().hasFormat('text/plain'):
print("dragged")
e.accept()
else:
e.ignore()
def dropEvent(self, e):
print("dropped")
self.addItem(event.mimeData().text())
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = App()
sys.exit(app.exec_())
默认情况下,
QListWidget
不处理删除的文本,因此您必须重新实现mime数据处理,如下所示:看起来您的代码是基于this example。在
主要区别在于您的}。不幸的是,
CustomLabel
继承了QListWidget
,而不是{QListWidget
继承了QAbstractScrollArea
,并且与滚动区域相关联的viewport小部件将接收各种拖放事件,而不是QListWidget
本身。在最好的办法是在视图上安装一个事件过滤器。。。。在
编辑1:
你可能还需要添加。。。在
^{pr2}$太棒了。现在这是可行的。 非常感谢你的帮助。 所以这就是全部代码:
相关问题 更多 >
编程相关推荐