PySide: Drag and drop files into QListWidget

后端 未结 3 1374
时光说笑
时光说笑 2021-01-06 15:22

This is my first entry here so apologies for any newbie mistakes. I\'ve searched both here and Google with no luck before posting.

I want to be able to add images to

3条回答
  •  天命终不由人
    2021-01-06 15:43

    Found out how PySide signals work in the end. Here's the PyQt4 code above, ported to PySide. I'd love to hear if there are better solutions out there.

    import sys
    import os
    from PySide import QtGui, QtCore
    
    class TestListView(QtGui.QListWidget):
    
        fileDropped = QtCore.Signal(list)
    
        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.fileDropped.emit(links)
            else:
                event.ignore()
    
    class MainForm(QtGui.QMainWindow):
        def __init__(self, parent=None):
            super(MainForm, self).__init__(parent)
    
            self.view = TestListView(self)
            self.view.fileDropped.connect(self.pictureDropped)
            self.setCentralWidget(self.view)
    
        def pictureDropped(self, l):
            for url in l:
                if os.path.exists(url):
                    print(url)                
                    icon = QtGui.QIcon(url)
                    pixmap = icon.pixmap(72, 72)                
                    icon = QtGui.QIcon(pixmap)
                    item = QtGui.QListWidgetItem(url, self.view)
                    item.setIcon(icon)        
                    item.setStatusTip(url)        
    
    def main():
        app = QtGui.QApplication(sys.argv)
        form = MainForm()
        form.show()
        app.exec_()
    
    if __name__ == '__main__':
        main()
    

提交回复
热议问题