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

时间:2018-02-02 12:25:26

标签: 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_())

并且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
    }
}

这是它的外观,按钮不是'Material.Teal',无论我尝试什么颜色它仍然无效。我用Pane和其他元素尝试过,但仍然没有。 enter image description here

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

我已尝试过其他样式/方法,例如pallete(orFusion): 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")
        }
    }
}

enter image description here

2 个答案:

答案 0 :(得分:4)

在您的情况下,有两种可能的解决方案:

  1. 如果您想使用Material.background,您必须确定您要使用的样式是材质,为此您可以选择以下选项之一:
  2. 选项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_())
    

    选项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_())
    

    选项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
    

    然后创建 resource.qrc

    <强> resource.qrc

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

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

    pyrcc5 resource.qrc -o resource_rc.py
    

    最后将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_())
    
    1. 或不使用Material样式,仅通过使用调色板来使用它们的颜色:
    2. 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)
          }
      }
      

答案 1 :(得分:0)

相关问题