[英]PyQt - QFileDialog - directly browse to a folder?
有沒有辦法直接瀏覽到使用QFileDialog的文件夾?
這意味着,不是在導航到目標文件夾時雙擊每個文件夾,只需在某處輸入路徑或使用Mac OS X上的Finder中的熱鍵(Shift + Command + G)。
謝謝!
編輯:(我的代碼)
filter = "Wav File (*.wav)"
self._audio_file = QtGui.QFileDialog.getOpenFileName(self, "Audio File",
"/myfolder/folder", filter)
self._audio_file = str(self._audio_file)
如果使用靜態QFileDialog
函數,您將獲得本機文件對話框,因此您將受限於平台提供的功能。 您可以查閱適用於您的平台的文檔,以了解您所需的功能是否可用。
如果它不可用,你將不得不接受Qt的內置文件對話框,並添加自己的功能。 對於您的特定用例,這應該很簡單,因為內置對話框似乎已經擁有您想要的內容。 它有一個側欄 ,顯示用戶可以直接導航到的“位置”列表。 您可以像這樣設置自己的地方:
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]
這是一個方便的功能,可以快速打開/保存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 ''
下面你會發現一個簡單的測試,它直接打開某個路徑上的對話框,在這種情況下將是當前的工作目錄。 如果要直接打開另一個路徑,可以使用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()
改為使用getExistingDirectory
方法:
from PyQt5.QtWidgets import QFileDialog
dialog = QFileDialog()
foo_dir = dialog.getExistingDirectory(self, 'Select an awesome directory')
print(foo_dir)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.