Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当setAcceptDrops设置设置为True时,如何检测QListWidet内部移动信号_Python_Pyqt5_Qlistwidget - Fatal编程技术网

Python 当setAcceptDrops设置设置为True时,如何检测QListWidet内部移动信号

Python 当setAcceptDrops设置设置为True时,如何检测QListWidet内部移动信号,python,pyqt5,qlistwidget,Python,Pyqt5,Qlistwidget,我正在尝试检测来自QListWidget的内部移动信号,同时使用拖放效果工具。但目前在我的代码中,由于我正在自我处理dragEnterEvent、dragMoveEvent和moveEvent,所以内部移动信号被忽略。我有没有办法回避这个问题?下面是复制该问题的简单代码 您可以将外部项拖动到列表小部件,但现在无法移动这些项 导入系统,操作系统 从PyQt5.qtwidts导入QApplication、QWidget、QLabel、QLineEdit、QListWidget、\ QVBoxLayo

我正在尝试检测来自QListWidget的内部移动信号,同时使用拖放效果工具。但目前在我的代码中,由于我正在自我处理dragEnterEvent、dragMoveEvent和moveEvent,所以内部移动信号被忽略。我有没有办法回避这个问题?下面是复制该问题的简单代码

您可以将外部项拖动到列表小部件,但现在无法移动这些项

导入系统,操作系统 从PyQt5.qtwidts导入QApplication、QWidget、QLabel、QLineEdit、QListWidget、\ QVBoxLayout、QHBoxLayout、QBStractItemView 从PyQt5.QtCore导入Qt 类ListWidgetQListWidget: def u_init__self,父项=无: super.\uuuu init\uuuu parent=无 self.setAcceptDropsTrue self.setStyleSheet“字体大小:25px” def dragEnterEventself,事件: printevent.mimeData.url printdirevent.mimeData 如果event.mimeData.hasURL: event.accept 其他: event.ignore def dragMoveEventself,事件: 如果event.mimeData.hasURL: event.setDropActionQt.CopyAction event.accept 其他: 打印“y” event.ignore def dropEventself,事件: 如果event.mimeData.hasURL: event.setDropActionQt.CopyAction event.accept Pdfiles=[] 对于event.mimeData.url中的url: 如果url.isLocalFile: pdfFiles.appendstrurl.toLocalFile self.additemsdpffiles 其他: event.ignore 类AppDemoQWidget: 定义初始自我: 超级__ self.resize1200800 数据=['Microsoft'、'Facebook'、'Google'] mainLayout=QHBoxLayout self.lst=ListWidget self.lst.addItemsdata 自我第一设置样式表' 字体大小:30px ' self.lst.setDragDropModeQAbstratemView.InternalMove mainLayout.addWidgetself.lst self.setLayoutmainLayout 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': app=QApplicationsys.argv demo=AppDemo 演示 sys.exitapp.exec_ 当mimedata没有URL时,不要调用event.ignore,而是调用父对象的方法,以便像默认的QListWidget一样处理拖放。另外,确定拖动操作源的另一种方法是使用event.source


谢谢你的解决方案,它工作得很好。肯定会深入event.source方法来了解更多用法。答案标记为解决方案。 def dragEnterEvent(self, event): if event.mimeData().hasUrls(): event.accept() else: super().dragEnterEvent(event) def dragMoveEvent(self, event): if event.mimeData().hasUrls(): event.setDropAction(Qt.CopyAction) event.accept() else: super().dragMoveEvent(event) 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: super().dropEvent(event)