2016-11-22 10 views
1

QFileDialogスタイルシートを設定しようとしていますが、効果がありません。コードは次のとおりです。QFileDialogでスタイルシートを設定するには?

dial = QFileDialog() 
dial.setStyleSheet(self.styleSheet()) 
path = dial.getOpenFileName(self, "Specify File") 

これが機能しない理由は何ですか?

+1

のように見えます

from PyQt5 import QtWidgets def show_file_dialog(): QtWidgets.QFileDialog.getOpenFileName(b, options=QtWidgets.QFileDialog.DontUseNativeDialog) app = QtWidgets.QApplication([]) b = QtWidgets.QPushButton('Test') b.setStyleSheet("QWidget { background-color: yellow }") b.clicked.connect(show_file_dialog) b.show() app.exec_() 

あなたは上記のコードを実行するときに何が起こるかを説明できますか?あなたは何らかのエラーを受け取りますか? –

+0

いいえ、getOpenFileNameウィンドウは白い標準ウィンドウです。ここでは、暗い灰色で、他のいくつかの変更が必要でした。スタイルには背景色/色があり、他のパラメータが指定されています。アプリケーションのテーマを一定にしようとしていて、QFIleDialogの外観を編集することはできませんでした... – Dariusz

答えて

2

私はいつも親を設定し、可能な限りスタイルシートの継承を使用することをお勧めします。そうすれば、QFileDialogという静的関数を使うこともできます。

ekhumoros suspicionネイティブファイルダイアログがスタイルシートを無視することが確認できます。それは実際にWindows上で行います。

Qtの組み込みファイルダイアログを使用した例です。

enter image description here

2

を使用すると、QFileDialogのインスタンスでsetStylesheetを呼び出しても効果はありません。これらの関数は独自の内部ファイルダイアログを作成し、スタイルシートは無視されます。

独自のスタイルシートを使用する場合は、あなたが作成したファイル・ダイアログのインスタンスを使用する必要があります。しかし

dial = QFileDialog() 
    dial.setStyleSheet(self.styleSheet()) 
    dial.setWindowTitle('Specify File') 
    dial.setFileMode(QFileDialog.ExistingFile) 
    if dial.exec_() == QFileDialog.Accepted: 
     path = dial.selectedFiles()[0] 

、これはあなたが得ることを意味するQtの組み込みのファイルダイアログではなく、あなたのプラットフォームのネイティブなファイルダイアログよりも

PS:あなたはネイティブファイルダイアログとスタイルシートは、それには影響はありませんのですか場合

は、唯一の回避策は、Qtの組み込みのファイルダイアログにフォールバックすることになります。これを行うには、ちょうどこの行を追加します。

dial.setOption(QFileDialog.DontUseNativeDialog) 
+1

'dial.setStyleSheet(self.styleSheet())の代わりに、なぜ親とスタイルシートの継承。 'dial = QFileDialog(self)'? – Trilarion

+0

@トルリオン。私はちょうどそれを考えなかったので、私はネイティブのファイルダイアログの問題に気を取られたと思います。 – ekhumoro

+0

ねえ、私が必要だったのは 'QFileDialog.getOpenFileName(self、options = QFileDialog.DontUseNativeDialog)'でした。 – Dariusz

関連する問題