PyQT4: Drag and drop files into QListWidget

后端 未结 1 949
一整个雨季
一整个雨季 2020-12-02 12:57

I\'ve been coding a OCR book scanning thing (it renames pages by reading the page number), and have switched to a GUI from my basic CLI Python script.

I\'m using PyQ

相关标签:
1条回答
  • 2020-12-02 13:22

    The code you're using as an example seem to work fine and looks quite clean. According to your comment your list widget is not getting initialized; this should be the root cause of your issue. I've simplified your code a bit a tried it on my Ubuntu 10.04LTS and it worked fine. My code is listed below, see if it would for you also. You should be able to drag and drop a file into the list widget; once it's dropped a new item is added showing the image and image's file name.

    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 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()
    

    hope this helps, regards

    0 讨论(0)
提交回复
热议问题