PyQt - QFileDialog - 直接浏览到文件夹?
PyQt - QFileDialog - directly browse to a folder?
有什么方法可以使用 QFileDialog 直接浏览到文件夹吗?
意思是,无需在导航到目标文件夹时双击每个文件夹,只需在某处输入路径或使用 Mac 上 Finder 中的热键 (Shift+Command+G) OS X.
谢谢!
编辑:(我的代码)
filter = "Wav File (*.wav)"
self._audio_file = QtGui.QFileDialog.getOpenFileName(self, "Audio File",
"/myfolder/folder", filter)
self._audio_file = str(self._audio_file)
下面是一个简单的测试,它直接在特定路径打开对话框,在这种情况下将是当前工作目录。如果您想直接打开另一个路径,您可以使用 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()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
在 PyQt 4
中,您只需添加一个 QFileDialog
即可构建一个 window,该 window 在对话框中嵌入了路径文本字段。您可以在此处粘贴您的路径。
QtGui.QFileDialog.getOpenFileName(self, 'Select file') # For file.
选择目录:
QtGui.QFileDialog.getExistingDirectory(self, 'Select directory')
每个都有一个 路径文本字段:
如果您使用静态 QFileDialog
函数,您将获得一个 原生 文件对话框,因此您将只能使用平台。您可以查阅适用于您的平台的文档,看看您想要的功能是否可用。
如果它不可用,您将不得不满足于 Qt 的内置 文件对话框,并添加您自己的功能。对于您的特定用例,这应该很容易,因为内置对话框似乎已经有了您想要的内容。它有一个 side-bar 显示用户可以直接导航到的 "Places" 列表。您可以像这样设置自己的位置:
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]
这是一个方便的函数,可以快速制作 open/save 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 ''
改用getExistingDirectory
方法:
from PyQt5.QtWidgets import QFileDialog
dialog = QFileDialog()
foo_dir = dialog.getExistingDirectory(self, 'Select an awesome directory')
print(foo_dir)
有什么方法可以使用 QFileDialog 直接浏览到文件夹吗?
意思是,无需在导航到目标文件夹时双击每个文件夹,只需在某处输入路径或使用 Mac 上 Finder 中的热键 (Shift+Command+G) OS X.
谢谢!
编辑:(我的代码)
filter = "Wav File (*.wav)"
self._audio_file = QtGui.QFileDialog.getOpenFileName(self, "Audio File",
"/myfolder/folder", filter)
self._audio_file = str(self._audio_file)
下面是一个简单的测试,它直接在特定路径打开对话框,在这种情况下将是当前工作目录。如果您想直接打开另一个路径,您可以使用 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()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
在 PyQt 4
中,您只需添加一个 QFileDialog
即可构建一个 window,该 window 在对话框中嵌入了路径文本字段。您可以在此处粘贴您的路径。
QtGui.QFileDialog.getOpenFileName(self, 'Select file') # For file.
选择目录:
QtGui.QFileDialog.getExistingDirectory(self, 'Select directory')
每个都有一个 路径文本字段:
如果您使用静态 QFileDialog
函数,您将获得一个 原生 文件对话框,因此您将只能使用平台。您可以查阅适用于您的平台的文档,看看您想要的功能是否可用。
如果它不可用,您将不得不满足于 Qt 的内置 文件对话框,并添加您自己的功能。对于您的特定用例,这应该很容易,因为内置对话框似乎已经有了您想要的内容。它有一个 side-bar 显示用户可以直接导航到的 "Places" 列表。您可以像这样设置自己的位置:
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]
这是一个方便的函数,可以快速制作 open/save 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 ''
改用getExistingDirectory
方法:
from PyQt5.QtWidgets import QFileDialog
dialog = QFileDialog()
foo_dir = dialog.getExistingDirectory(self, 'Select an awesome directory')
print(foo_dir)