如何在 QFileDialog 上设置样式表?
How to set stylesheet on QFileDialog?
我正在尝试设置我的 QFileDialog
样式 sheet 但没有效果。这是代码:
dial = QFileDialog()
dial.setStyleSheet(self.styleSheet())
path = dial.getOpenFileName(self, "Specify File")
知道为什么这不起作用吗?
在 QFileDialog
的实例上调用 setStylesheet
在您使用 static functions 时无效。这些函数将创建自己的内部文件对话框,因此样式表将被忽略。
如果您想使用自己的样式表,则需要使用您创建的文件对话框实例:
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)
我建议始终设置父项并尽可能使用样式表的继承。这样你也可以使用 QFileDialog
.
的静态函数
我可以确认 本机文件对话框忽略了样式表。它确实在 Windows.
这里是使用 Qt 内置文件对话框的示例。
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_()
看起来像
同样对于 C++ 版本,DontUseNativeDialog 选项工作正常。
QString text = QFileDialog::getOpenFileName(parent,
tr("title message"),
folder_path_string,
tr("filter (*.extension)"),
nullptr,
QFileDialog::DontUseNativeDialog);
我正在尝试设置我的 QFileDialog
样式 sheet 但没有效果。这是代码:
dial = QFileDialog()
dial.setStyleSheet(self.styleSheet())
path = dial.getOpenFileName(self, "Specify File")
知道为什么这不起作用吗?
在 QFileDialog
的实例上调用 setStylesheet
在您使用 static functions 时无效。这些函数将创建自己的内部文件对话框,因此样式表将被忽略。
如果您想使用自己的样式表,则需要使用您创建的文件对话框实例:
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)
我建议始终设置父项并尽可能使用样式表的继承。这样你也可以使用 QFileDialog
.
我可以确认
这里是使用 Qt 内置文件对话框的示例。
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_()
看起来像
同样对于 C++ 版本,DontUseNativeDialog 选项工作正常。
QString text = QFileDialog::getOpenFileName(parent,
tr("title message"),
folder_path_string,
tr("filter (*.extension)"),
nullptr,
QFileDialog::DontUseNativeDialog);