小编thi*_*mic的帖子

PySide:将文件拖放到QListWidget中

这是我第一次进入这里,所以对任何新手的错误道歉.在发布之前,我在这里和谷歌都没有运气.

我希望能够使用文件浏览器中的拖放功能将图像添加到QListWidget.删除列表小部件上的有效文件还需要在我的应用程序的主类中触发一个函数,并将其传递给图像路径.

我发现这个代码正是如此,但对于PyQt4.在触发拖放事件时,从PySide而不是PyQt4导入QtCore和QtGui会产生分段错误.没有错误消息.

我想我已经将其追溯到一种处理信号的旧方法,并尝试使用这里描述的新的,更加pythonic的方式.我似乎无法使它工作,但仍然在类之间传递URL列表.

任何帮助将不胜感激!

import sys
import os
from PyQt4 import QtGui, QtCore

class TestListView(QtGui.QListWidget):
    def __init__(self, type, parent=None):
        super(TestListView, self).__init__(parent)
        self.setAcceptDrops(True)
        self.setIconSize(QtCore.QSize(72, 72))

    def dragEnterEvent(self, event):
        if event.mimeData().hasUrls:
            event.accept()
        else:
            event.ignore()

    def dragMoveEvent(self, event):
        if event.mimeData().hasUrls:
            event.setDropAction(QtCore.Qt.CopyAction)
            event.accept()
        else:
            event.ignore()

    def dropEvent(self, event):
        if event.mimeData().hasUrls:
            event.setDropAction(QtCore.Qt.CopyAction)
            event.accept()
            links = []
            for url in event.mimeData().urls():
                links.append(str(url.toLocalFile()))
            self.emit(QtCore.SIGNAL("dropped"), links)
        else:
            event.ignore()

class MainForm(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(MainForm, self).__init__(parent)

        self.view = TestListView(self)
        self.connect(self.view, QtCore.SIGNAL("dropped"), self.pictureDropped)
        self.setCentralWidget(self.view)

    def …
Run Code Online (Sandbox Code Playgroud)

python drag-and-drop pyqt qlistwidget pyside

3
推荐指数
1
解决办法
4019
查看次数

标签 统计

drag-and-drop ×1

pyqt ×1

pyside ×1

python ×1

qlistwidget ×1