【问题标题】:pyqt4 drag and drop files in Qlistviewpyqt4在Qlistview中拖放文件
【发布时间】:2015-04-27 06:47:19
【问题描述】:

我在 qlistview 中找不到拖放文件。

我找到了示例代码。

但这是 qlistwidget 和 qpushbutton

这个示例也在使用类

我想在下面的例子中进行拖放。

qlistview中的drop为什么不能使用?

main.py

from PyQt4 import QtCore, QtGui
from test import *
import sys

class main(QtGui.QMainWindow):
    def __init__(self,parent=None):
        global app
        QtGui.QWidget.__init__(self,parent)
        self.ui=Ui_MainWindow()
        self.ui.setupUi(self)

        app=QtGui.QApplication(sys.argv)
myapp=main()
myapp.show()
app.exec_()

test.py

from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName(_fromUtf8("Form"))
        Form.resize(273, 214)
        self.listView = QtGui.QListView(Form)
        self.listView.setGeometry(QtCore.QRect(10, 10, 256, 192))
        self.listView.setObjectName(_fromUtf8("listView"))
        self.listView.setAcceptDrops(True)
        self.listView.dropped.connect(mydragdrop)

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        Form.setWindowTitle(_translate("Form", "Form", None))

def mydragdrop(self):
    None

【问题讨论】:

    标签: python python-2.7 drag-and-drop pyqt4


    【解决方案1】:
    class DragAndDrop(QListView):          
        def __init__(self, parent):
            global listView
            super(DragAndDrop, self).__init__(parent)
            self.setAcceptDrops(True)
            self.setDragDropMode(QAbstractItemView.InternalMove)
            self.setFrameShadow(QFrame.Plain)
            self.setFrameShape(QFrame.Box)
            listView=self
    
        def dragEnterEvent(self, event):
            if event.mimeData().hasUrls():
                event.acceptProposedAction()
            else:
                super(DragAndDrop, self).dragEnterEvent(event)
    
        def dragMoveEvent(self, event):
            super(DragAndDrop, self).dragMoveEvent(event)
    
        def dropEvent(self, event):
            #global itemModel
            if event.mimeData().hasUrls():
                for url in event.mimeData().urls():
                    if url.path()[-5:]==".pcap":
                        if itemModel.findItems(url.path()[1:].replace("/","\\")):
                            pass
                        else:
                            item=QStandardItem(url.path()[1:].replace("/","\\"))
                            item.setCheckable(True)
                            itemModel.appendRow(item)
                    else:
                        pass
                event.acceptProposedAction()
                self.setModel(itemModel)
            else:
                super(DragAndDrop,self).dropEvent(event)
    

    在我的例子中。

    self.verticalLayout.addWidget(listView)
    

    【讨论】:

      猜你喜欢
      • 2014-11-19
      • 2011-05-08
      • 1970-01-01
      • 2013-01-01
      • 1970-01-01
      • 2012-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多