14

pyQt4を使用していて、GUIに[参照]ボタンを設定して、ユーザーが複数のファイルとフォルダーを選択できるダイアログボックスを開きたいと考えています。私はかなり研究しましたが、これを行うことができる方法を見つけられませんでした。

QFileDialog.getOpenFileNames()ではファイルのみを選択でき、QFileDialog.getExistingDirectory()ではディレクトリのみを選択できます。

どういうわけかそれらの機能を組み合わせることができる方法はありますか?理想的にはnativeDialogsを使用したいのですが、それは不可能のようです。結果として、私は見た目を妥協するつもりです。上記を実装する方法はありますか?

ここでも同じ質問がありますが、答えはc++です。Pythonの実装が必要です。 ユーザーがQFileDialogでファイルまたはフォルダーを選択できるようにする

4

2 に答える 2

11

これがあなたのために働くはずのハックです:「開く」ボタンを切断し、それをカスタマイズされた関数に再接続するQFileDialogのサブクラスを作成します。ただし、Qtは、ある時点で再構成される可能性のある特定のサブウィジェットを見つけることができることに依存しているため、異なるバージョンの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
于 2011-07-05T16:26:43.123 に答える
2

Qt5では、簡単に使用できます

return QtWidgets.QFileDialog.getOpenFileNames(self, title, directory, filter=filterFile)
于 2018-01-02T08:55:27.150 に答える