Multiple files AND folder selection in a QFileDialog?

后端 未结 2 1976
礼貌的吻别
礼貌的吻别 2020-12-31 08:42

I am using pyQt4 and want to have a Browse button in my GUI which opens up a Dialog box allowing user to select multiple files AND folders. I have researche

相关标签:
2条回答
  • 2020-12-31 09:38

    In Qt5 you can simply use

    return QtWidgets.QFileDialog.getOpenFileNames(self, title, directory, filter=filterFile)
    
    0 讨论(0)
  • 2020-12-31 09:40

    Here's a hack that should work for you: Create a subclass of QFileDialog that disconnects the "Open" button and reconnects it to a customized function. It's not guaranteed to work across different versions of Qt, though, since it relies on being able to find specific sub-widgets that may be reconfigured at some point.

    class FileDialog(QtGui.QFileDialog):
        def __init__(self, *args):
            QtGui.QFileDialog.__init__(self, *args)
            self.setOption(self.DontUseNativeDialog, True)
            self.setFileMode(self.ExistingFiles)
            btns = self.findChildren(QtGui.QPushButton)
            self.openBtn = [x for x in btns if 'open' in str(x.text()).lower()][0]
            self.openBtn.clicked.disconnect()
            self.openBtn.clicked.connect(self.openClicked)
            self.tree = self.findChild(QtGui.QTreeView)
    
        def openClicked(self):
            inds = self.tree.selectionModel().selectedIndexes()
            files = []
            for i in inds:
                if i.column() == 0:
                    files.append(os.path.join(str(self.directory().absolutePath()),str(i.data().toString())))
            self.selectedFiles = files
            self.hide()
    
        def filesSelected(self):
            return self.selectedFiles
    
    0 讨论(0)
提交回复
热议问题