Я пытаюсь обнаружить внутренний сигнал перемещения из QListWidget, пока у меня есть инструмент перетаскивания. Но в настоящее время с моим кодом, поскольку я сам выполняю функции dragEnterEvent, dragMoveEvent и moveEvent, внутренний сигнал перемещения игнорируется. Как я могу обойти эту проблему? Ниже приведен простой код, дублирующий проблему.
Вы можете перетаскивать внешние элементы в виджет списка, но теперь вы не можете перемещать элементы вокруг.
import sys, os
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, QListWidget, \
QVBoxLayout, QHBoxLayout, QAbstractItemView
from PyQt5.QtCore import Qt
class ListWidget(QListWidget):
def __init__(self, parent=None):
super().__init__(parent=None)
self.setAcceptDrops(True)
self.setStyleSheet('''font-size:25px''')
def dragEnterEvent(self, event):
# print(event.mimeData().urls())
# print(dir(event.mimeData()))
if event.mimeData().hasUrls():
event.accept()
else:
event.ignore()
def dragMoveEvent(self, event):
if event.mimeData().hasUrls():
event.setDropAction(Qt.CopyAction)
event.accept()
else:
print('y')
event.ignore()
def dropEvent(self, event):
if event.mimeData().hasUrls():
event.setDropAction(Qt.CopyAction)
event.accept()
pdfFiles = []
for url in event.mimeData().urls():
if url.isLocalFile():
pdfFiles.append(str(url.toLocalFile()))
self.addItems(pdfFiles)
else:
event.ignore()
class AppDemo(QWidget):
def __init__(self):
super().__init__()
self.resize(1200, 800)
data = ['Microsoft', 'Facebook', 'Google']
mainLayout = QHBoxLayout()
self.lst = ListWidget()
self.lst.addItems(data)
self.lst.setStyleSheet('''
font-size:30px
''')
self.lst.setDragDropMode(QAbstractItemView.InternalMove)
mainLayout.addWidget(self.lst)
self.setLayout(mainLayout)
if __name__ == '__main__':
app = QApplication(sys.argv)
demo = AppDemo()
demo.show()
sys.exit(app.exec_())