从QListWidget拖放到QPlainTextEdit
我正在尝试实现从 QListWidget
拖放到 QPlainTextEdit
的功能。
我使用了 eventFilter
,但不知道为什么 QPlainTextEdit
只接收到 Drag
事件,而 Drop
事件从来没有发生。
源代码:
from PyQt4 import QtGui, QtCore
class Window(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
widget = QtGui.QWidget(self)
self.setCentralWidget(widget)
layout = QtGui.QVBoxLayout(widget)
self.listA = QtGui.QListWidget(self)
self.textedit = QtGui.QPlainTextEdit(self)
self.textedit.installEventFilter(self)
self.listA.setDragEnabled(True)
for widget in (self.listA, self.textedit):
widget.setAcceptDrops(True)
layout.addWidget(widget)
for item in 'One Two Three Four Five Six'.split():
self.listA.addItem(item)
def eventFilter(self, source, event):
if (event.type() == QtCore.QEvent.DragEnter and source is self.textedit):
event.accept()
return False
if (event.type() == QtCore.QEvent.Drop and source is self.textedit):
print 'Drop'
return False
return QtGui.QMainWindow.eventFilter(self, source, event)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
我该如何处理 Drop
事件,并将文本正确放入 QPlainTextEdit
中呢?
1 个回答
2
根据这个例子,如果一个事件被成功过滤了,就需要返回True
。我其实不太确定,但至少看起来这个拖放功能是有效的。
from PyQt4 import QtGui, QtCore
class Window(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
widget = QtGui.QWidget(self)
self.setCentralWidget(widget)
layout = QtGui.QVBoxLayout(widget)
self.listA = QtGui.QListWidget(self)
self.textedit = QtGui.QPlainTextEdit(self)
self.textedit.installEventFilter(self)
self.listA.setDragEnabled(True)
for widget in (self.listA, self.textedit):
widget.setAcceptDrops(True)
layout.addWidget(widget)
for item in 'One Two Three Four Five Six'.split():
self.listA.addItem(item)
def eventFilter(self, source, event):
if (event.type() == QtCore.QEvent.DragEnter and source is self.textedit):
event.accept()
print 'DragEnter'
return True
elif (event.type() == QtCore.QEvent.Drop and source is self.textedit):
print 'Drop'
return True
else:
return super(Window, self).eventFilter(source, event)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = Window()
window.show()