PyQt QML材质设计按钮背景不会更改

HaR*_*HaR 2 python pyqt qml pyqt5 qtquickcontrols2

我是QML的新手,正在尝试更改按钮的背景颜色,但似乎无济于事。这是python代码:import sys

from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtCore import QUrl
from PyQt5.QtQuick import QQuickView


if __name__ == "__main__":

    app = QApplication(sys.argv)

    view = QQuickView()
    view.setSource(QUrl('basic.qml'))
    view.show()

    sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

和basic.qml:

import QtQuick 2.0
import QtQuick.Controls 2.0
import QtQuick.Controls.Material 2.0
import QtQuick.Controls.Material 2.3

Rectangle {
    width:600;height:150;
    color: Material.color(Material.Red)
    Button {
        text: qsTr("Button")
        highlighted: true
        Material.background: Material.Teal
    }
}
Run Code Online (Sandbox Code Playgroud)

这是它的外观,该按钮不是“ Material.Teal”,无论我尝试使用哪种颜色,它仍然无法正常工作。我已经尝试了Pane和其他元素,但还是没有。 在此处输入图片说明

这是我获得代码的位置:http : //doc.qt.io/qt-5/qtquickcontrols2-material.html#material-primary-attached-prop

我已经尝试过使用其他样式/方法(例如pallet(或融合)):https ://doc.qt.io/qt-5.10/qml-qtquick-controls2-control.html#palette-prop

Page {
    palette.text: "red"

    Column {
        Label {
            text: qsTr("This will use red color...")
        }

        Switch {
            text: qsTr("... and so will this")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

eyl*_*esc 5

您的情况有2种可能的解决方案:


  1. 如果要使用Material.background,则必须确定要使用的样式是Material,为此,可以选择以下选项之一:

选项1:通过添加样式sys.argv

import sys

from PyQt5.QtGui import QGuiApplication
from PyQt5.QtCore import QUrl
from PyQt5.QtQuick import QQuickView


if __name__ == "__main__":
    sys.argv += ['--style', 'material']
    app = QGuiApplication(sys.argv)

    view = QQuickView()
    view.setSource(QUrl('basic.qml'))
    view.show()

    sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

选项2:通过添加样式os.environ()

import os
import sys

from PyQt5.QtGui import QGuiApplication
from PyQt5.QtCore import QUrl
from PyQt5.QtQuick import QQuickView


if __name__ == "__main__":
    app = QGuiApplication(sys.argv)
    os.environ["QT_QUICK_CONTROLS_STYLE"] = "Material"

    view = QQuickView()
    view.setSource(QUrl('basic.qml'))
    view.show()

    sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

选项3:创建一个qtquickcontrols2.conf文件,并使用qresource将其加载到应用程序中:

qtquickcontrols2.conf

; This file can be edited to change the style of the application
; See Styling Qt Quick Controls 2 in the documentation for details:
; http://doc.qt.io/qt-5/qtquickcontrols2-styles.html

[Controls]
Style=Material
Run Code Online (Sandbox Code Playgroud)

然后创建一个resource.qrc

resource.qrc

<RCC>
    <qresource prefix="/">
        <file>qtquickcontrols2.conf</file>
    </qresource>
</RCC>
Run Code Online (Sandbox Code Playgroud)

然后,您必须将.qrc转换为.py:

pyrcc5 resource.qrc -o resource_rc.py
Run Code Online (Sandbox Code Playgroud)

最后,将resource_rc.py文件导入到main.py中

main.py

from PyQt5.QtGui import QGuiApplication
from PyQt5.QtCore import QUrl
from PyQt5.QtQuick import QQuickView

import sys
import resource_rc

if __name__ == "__main__":
    app = QGuiApplication(sys.argv)
    view = QQuickView()

    view.setSource(QUrl('basic.qml'))
    view.show()
    sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
  1. 或不使用“材质”样式,而仅通过使用调色板使用其颜色:

import QtQuick 2.0
import QtQuick.Controls 2.3
import QtQuick.Controls.Material 2.3

Rectangle {
    width:600;height:150;
    color: Material.color(Material.Red)
    Button {
        text: qsTr("Button")
        highlighted: true
        palette.dark: Material.color(Material.Teal)
    }
}
Run Code Online (Sandbox Code Playgroud)