我正在使用pyQt4,并希望在GUI中有一个浏览按钮,它打开一个对话框,允许用户选择多个文件、和文件夹。我已经做了很多研究,但是找不到任何方法来做到这一点。
QFileDialog.getOpenFileNames()只允许我选择文件,而QFileDialog.getExistingDirectory()只允许选择目录。
我有没有办法把他们的功能结合起来。理想情况下,我希望使用nativeDialogs,但这似乎是不可能的。因此,我愿意在外表上妥协。有什么办法可以实现上述的吗?
这里也提出了同样的问题,但答案在c++中。我需要一个python实现。Allow user to select a file or a folder in QFileDialog
发布于 2011-07-05 16:26:43
下面是一个适合您的黑客:创建一个QFileDialog的子类,该子类断开"Open“按钮并将其重新连接到自定义函数。但是,它不能保证在不同版本的Qt中工作,因为它依赖于能够找到特定的子部件,这些子部件可能在某个时候被重新配置。
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
发布于 2018-01-02 08:55:27
在Qt5中,可以简单地使用
return QtWidgets.QFileDialog.getOpenFileNames(self, title, directory, filter=filterFile)
https://stackoverflow.com/questions/6484793
复制相似问题