如何在 pyqt 中使用 QtQuickControls2 样式?

Posted

技术标签:

【中文标题】如何在 pyqt 中使用 QtQuickControls2 样式?【英文标题】:How to use QtQuickControls2 Style in pyqt? 【发布时间】:2021-10-22 13:58:08 【问题描述】:

我读过一篇文章The Imagine Style,可以在qml 中使用c++ 代码样式。

需要qtquickcontrols2.conf 和Imagine Style 或者其他文件。

但我不知道如何在 pyqt 风格中使用它。

我想知道在pyqt中可以使用The Imagine Style吗?

【问题讨论】:

你的意思是用setStyleSheet() 将它用于QtWidgets 吗?如果是这种情况,则不能,因为文档中提到的 Imagine Style 仅适用于 Qt Quick。 @musicamante 其实只针对Qt Quick Control2,不是QtQuick的全部 【参考方案1】:

这个问题与PyQt QML Material Design button background won't change 类似,所以这篇文章将笼统地介绍如何使用QtQuickControls 2 的样式,我的回答是基于将官方文档中的选项:Styling Qt Quick Controls 2 转换为python:

1。在 Python 中使用 QQuickStyle(仅适用于 PySide2 和 PySide6)

from PySide2.QtQuickControls2 import QQuickStyle
# from PySide6.QtQuickControls2 import QQuickStyle

# ...
engine = QQmlApplicationEngine()
QQuickStyle.setStyle("Imagine")

2。命令行参数

app = QGuiApplication(sys.argv + ["-style", "Imagine"])

3。环境变量

os.environ["QT_QUICK_CONTROLS_STYLE"] = "Imagine"

4。配置文件

qtquickcontrols2.conf

[Controls]
Style=Imagine

resource.qrc

<RCC>
    <qresource prefix="/">
        <file>qtquickcontrols2.conf</file>
    </qresource>
</RCC>

PyQt5

pyrcc5 resources.qrc -o resources_rc.py

PySide2:

rcc -g python resources.qrc -o resources_rc.py

pyside2-rcc resources.qrc -o resources_rc.py

然后你只需要在你的主文件中导入模块:

import resources_rc

注意:“Imagine”可以更改为任何样式:Default、Fusion、Material 和 Universal。

【讨论】:

我在 win10 上使用 PySide6.1.2 并按照您的步骤进行操作。但是它发出了警告消息QApplication: invalid style override 'Imagine' passed, ignoring it.Available styles: windowsvista, Windows, Fusion @jie 为什么使用 QApplication?一般来说,QGuiApplication 就足够了。另一方面,该警告是误报,因为它认为您正在将样式设置为 QtWidgets。跳过它或使用其他选项。 QApplication可以做更多的事情,写QWidgets控件或者其他好玩的东西。 @jie 如果您不想看到那个烦人的警告,请使用其他选项,例如:os.environ["QT_QUICK_CONTROLS_STYLE"] = "Imagine" zh,我会尝试使用您的提示。

以上是关于如何在 pyqt 中使用 QtQuickControls2 样式?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PyQt 在窗口中切换布局? (不关闭/打开窗口)

pyqt5如何在绘图中使用yticks? [复制]

如何在 PyQt6 中检查 MouseButtonPress 事件?

如何在 PyQT 中使用 QThread

如何通过 moveToThread() 在 pyqt 中正确使用 QThread?

如何在 Python 中使用 PyQt 显示 RGB 图像? [复制]