相关文章推荐
无邪的黄花菜  ·  PyQt PySide ...·  1 月前    · 
气宇轩昂的大象  ·  c++ - Windows Xp - ...·  1 年前    · 

PyQt - QFileDialog - 直接浏览到一个文件夹?

12 人关注

有什么办法可以用QFileDialog直接浏览到一个文件夹吗?

意思是,在导航到目标文件夹时,不要双击每个文件夹,只需在某处输入路径,或使用像Mac OS X上Finder中的热键(Shift+Command+G)。

EDIT: (my code)

    filter = "Wav File (*.wav)"
    self._audio_file = QtGui.QFileDialog.getOpenFileName(self, "Audio File",
                                                        "/myfolder/folder", filter)
    self._audio_file = str(self._audio_file)
    
python
qt
pyqt
qfiledialog
YaronGh
YaronGh
发布于 2016-08-03
5 个回答
ekhumoro
ekhumoro
发布于 2016-08-03
已采纳
0 人赞同

如果你使用静态的 QFileDialog 函数,你会得到一个 本地人 文件-对话框,因此你将被限制在平台提供的功能上。你可以查阅你的平台的文档,看看你想要的功能是否可用。

如果它不可用,你将不得不满足于Qt的 built-in 文件-对话框,并添加你自己的功能。对于你的具体使用情况,这应该很容易,因为内置对话框似乎已经有了你想要的东西。它有一个 侧边栏 显示一个用户可以直接浏览的 "地点 "列表。你可以像这样设置你自己的地方。

dialog = QtGui.QFileDialog(self, 'Audio Files', directory, filter)
dialog.setFileMode(QtGui.QFileDialog.DirectoryOnly)
dialog.setSidebarUrls([QtCore.QUrl.fromLocalFile(place)])
if dialog.exec_() == QtGui.QDialog.Accepted:
    self._audio_file = dialog.selectedFiles()[0]
    
很好, Sidebar 的事情肯定有帮助。谢谢!
kblst
kblst
发布于 2016-08-03
0 人赞同

这里有一个方便的功能,可以快速进行打开/保存 QFileDialog

from PyQt5.QtWidgets import QFileDialog, QDialog
from definitions import ROOT_DIR
from PyQt5 import QtCore
def FileDialog(directory='', forOpen=True, fmt='', isFolder=False):
    options = QFileDialog.Options()
    options |= QFileDialog.DontUseNativeDialog
    options |= QFileDialog.DontUseCustomDirectoryIcons
    dialog = QFileDialog()
    dialog.setOptions(options)
    dialog.setFilter(dialog.filter() | QtCore.QDir.Hidden)
    # ARE WE TALKING ABOUT FILES OR FOLDERS
    if isFolder:
        dialog.setFileMode(QFileDialog.DirectoryOnly)
    else:
        dialog.setFileMode(QFileDialog.AnyFile)
    # OPENING OR SAVING
    dialog.setAcceptMode(QFileDialog.AcceptOpen) if forOpen else dialog.setAcceptMode(QFileDialog.AcceptSave)
    # SET FORMAT, IF SPECIFIED
    if fmt != '' and isFolder is False:
        dialog.setDefaultSuffix(fmt)
        dialog.setNameFilters([f'{fmt} (*.{fmt})'])
    # SET THE STARTING DIRECTORY
    if directory != '':
        dialog.setDirectory(str(directory))
    else:
        dialog.setDirectory(str(ROOT_DIR))
    if dialog.exec_() == QDialog.Accepted:
        path = dialog.selectedFiles()[0]  # returns a list
        return path
    else:
        return ''
    
Is ROOT_DIR = os.path.abspath(__file__) ? What is that definitions module?
Oscar Lima
Oscar Lima
发布于 2016-08-03
0 人赞同

getExistingDirectory 的方法代替。

from PyQt5.QtWidgets import QFileDialog
dialog = QFileDialog()
foo_dir = dialog.getExistingDirectory(self, 'Select an awesome directory')
print(foo_dir)
    
Right (just noticed it now). Only difference would be the PyQt version (4 vs 5)
ospahiu
ospahiu
发布于 2016-08-03
0 人赞同

PyQt 4 中,你能够只添加一个 QFileDialog 来构建一个窗口,该窗口有一个嵌入对话框的路径文本字段。你可以在这里粘贴你的路径。

QtGui.QFileDialog.getOpenFileName(self, 'Select file')  # For file.

对于选择一个目录。

QtGui.QFileDialog.getExistingDirectory(self, 'Select directory')

每个人都将以一个路径文本字段:

由于某些原因,这对我来说并不奏效......使用。 QtGui.QFileDialog.getOpenFileName(self, "Load File", filter) 。我没有得到那个路径文本字段。 filter 是我创建的这样一个字符串,用来选择特定类型的文件。
就像我下面提到的,如果我把我的QFileDialog设置为打开目录,然后在出现的默认路径文本字段中输入一个目录路径,它只是选择那个文件夹并返回,它不会导航到它并 "停留 "在那里。
也许可以贴出你的对话框的截图,以及完整的代码?
BPL
BPL
发布于 2016-08-03
0 人赞同

下面你会看到一个简单的测试,它可以直接打开某个路径上的对话框,在这种情况下就是当前工作目录。如果你想直接打开另一个路径,你可以直接使用包含在os.path模块中的python的目录函数。

 import sys
 import os
 from PyQt4 import QtGui
 def test():
      filename = QtGui.QFileDialog.getOpenFileName(
           None, 'Test Dialog', os.getcwd(), 'All Files(*.*)')
 def main():
     app = QtGui.QApplication(sys.argv)
     test()