首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >QFileDialog中的多个文件和文件夹选择?

QFileDialog中的多个文件和文件夹选择?
EN

Stack Overflow用户
提问于 2011-06-26 15:19:25
回答 2查看 11.7K关注 0票数 14

我正在使用pyQt4,并希望在GUI中有一个浏览按钮,它打开一个对话框,允许用户选择多个文件、文件夹。我已经做了很多研究,但是找不到任何方法来做到这一点。

QFileDialog.getOpenFileNames()只允许我选择文件,而QFileDialog.getExistingDirectory()只允许选择目录。

我有没有办法把他们的功能结合起来。理想情况下,我希望使用nativeDialogs,但这似乎是不可能的。因此,我愿意在外表上妥协。有什么办法可以实现上述的吗?

这里也提出了同样的问题,但答案在c++中。我需要一个python实现。Allow user to select a file or a folder in QFileDialog

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-05 16:26:43

下面是一个适合您的黑客:创建一个QFileDialog的子类,该子类断开"Open“按钮并将其重新连接到自定义函数。但是,它不能保证在不同版本的Qt中工作,因为它依赖于能够找到特定的子部件,这些子部件可能在某个时候被重新配置。

代码语言:javascript
运行
复制
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
票数 11
EN

Stack Overflow用户

发布于 2018-01-02 08:55:27

在Qt5中,可以简单地使用

代码语言:javascript
运行
复制
return QtWidgets.QFileDialog.getOpenFileNames(self, title, directory, filter=filterFile)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6484793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档