Python PyQt5:如何将文本从QTextEdit拖动到QlistView中?
我目前正在构建一个GUI,我想在其中添加从QTextEdit拖动字符串并将其放入QListView的可能性,以便删除的字符串创建一个新行 但可悲的是,我对自己应该做什么感到有点困惑。有很多例子,但我不清楚我应该做什么 据我所知,我必须重新实现函数,但现在我更像是一只无头鸡Python PyQt5:如何将文本从QTextEdit拖动到QlistView中?,python,python-3.x,pyqt5,qtextedit,qlistview,Python,Python 3.x,Pyqt5,Qtextedit,Qlistview,我目前正在构建一个GUI,我想在其中添加从QTextEdit拖动字符串并将其放入QListView的可能性,以便删除的字符串创建一个新行 但可悲的是,我对自己应该做什么感到有点困惑。有很多例子,但我不清楚我应该做什么 据我所知,我必须重新实现函数,但现在我更像是一只无头鸡 from PyQt5 import QtCore, QtGui, QtWidgets import testing_ground_lib, sys class ListModel(QtGui.QStandardItemM
from PyQt5 import QtCore, QtGui, QtWidgets
import testing_ground_lib, sys
class ListModel(QtGui.QStandardItemModel):
def supportedDropActions(self):
<MAYBE DO STUFF HERE>
def dropMimeData(self, data, action, row, column, modelIndex):
<MAYBE DO STUFF HERE>
class testing_ground(QtWidgets.QMainWindow, testing_ground_lib.Ui_TestWindow):
def __init__(self, parent=None):
QtWidgets.QMainWindow.__init__(self, parent)
self.setupUi(self)
self.list_model = ListModel(0, 1, self)
self.inputs_list.setModel(self.list_model)
sys.argv = ['']
app = QtWidgets.QApplication(sys.argv)
testing_ground = testing_ground()
testing_ground.show()
app.exec_()
在我的ListModel课上。现在我想我只需要重新实现dropMimeData,我想一切都会好起来的。如果我能做到这一点,我会更新这篇文章。这里有一个解决方案,可以将QTextEdit中突出显示的文本拖动到QListView中,并使用该文本添加新行。子类QListView和重新实现dragEnterEvent、dragMoveEvent和dropEvent。在dropEvent中,使用QStandardItemModel.appendRow添加新项 结果:
谢谢你的帮助。我昨天晚上确实设法让一些东西工作了,但没有你的代码那么干净。非常感谢你。
def mimeTypes(self):
return ['text/plain']
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class ListView(QListView):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setAcceptDrops(True)
self.setModel(QStandardItemModel(0, 1))
def dragEnterEvent(self, event):
event.accept() if event.mimeData().hasText() else event.ignore()
def dragMoveEvent(self, event):
event.accept() if event.mimeData().hasText() else event.ignore()
def dropEvent(self, event):
if event.mimeData().hasText():
event.setDropAction(Qt.CopyAction)
self.model().appendRow(QStandardItem(event.mimeData().text()))
event.accept()
else:
event.ignore()
if __name__ == '__main__':
app = QApplication(sys.argv)
window = QWidget()
hbox = QHBoxLayout(window)
hbox.addWidget(QTextEdit())
hbox.addWidget(ListView())
window.show()
sys.exit(app.exec_())