web-dev-qa-db-ja.com

PyQt-QFileDialog-フォルダを直接参照しますか?

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)
4
YaronGh

静的なQFileDialog関数を使用すると、nativeファイルダイアログが表示されるため、に制限されます。プラットフォームによって提供される機能。プラットフォームのドキュメントを参照して、必要な機能が利用可能かどうかを確認できます。

利用できない場合は、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]
5
ekhumoro

PyQt 4QFileDialogを追加するだけで、ダイアログ内にパステキストフィールドが埋め込まれたウィンドウを作成できます。ここにパスを貼り付けることができます。

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

ディレクトリを選択するには:

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

それぞれがパステキストフィールドを備えています:

enter image description here

1
ospahiu

代わりにgetExistingDirectoryメソッドを使用してください。

from PyQt5.QtWidgets import QFileDialog

dialog = QFileDialog()
foo_dir = dialog.getExistingDirectory(self, 'Select an awesome directory')
print(foo_dir)
1
user3160702

以下に、特定のパスでダイアログを直接開く簡単なテストを示します。この場合は、現在の作業ディレクトリになります。別のパスを直接開きたい場合は、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()
0
BPL

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 ''
0
Derek R.