PyQt改变QPushButton背景颜色而不重置样式

时间:2016-06-05 21:39:27

标签: pyqt4

我想更改Button的背景颜色和文字颜色,而无需更改/重置整个样式。

目前,我正在使用它:

loop ? ?

但这会改变按钮的整体风格:

enter image description here

由于默认样式如下所示:

enter image description here

我想有这样的事情:

enter image description here

因此,如果我要更改操作系统,我希望它使用默认样式并仅更改背景颜色。

我可以不手动复制样式吗?

修改

@Controlix感谢您指点我正确的方向。但是,我似乎无法改变背景颜色。

我只能使用以下方式更改边框和文字颜色:

public static boolean verify(Graph graph)
{
    for(int i=0; i < graph.getVertex().size(); i++)
    {
        // List of vertexes visited 
        ArrayList<Character> accessibleVertex = new ArrayList<Character>();
        getChildren(graph.getVertex().get(i), graph.getVertex().get(i).getName(), accessibleVertex);    

        // If the count of vertex without father equals a count of the list of vertexes visited, his is a "good" vertex
        if((graph.getVertex().size()-1) == accessibleVertex.size())
            return true;
    }

    return false;
}

private static void getChildren(Vertex vertex, char fatherName, ArrayList<Character> accessibleVertex)
{
    // Ignore the 'father'
    if(vertex.getName() != fatherName)
        addIfUnique(vertex.getName(), accessibleVertex);

    for(int i=0; i < vertex.getEdges().size(); i++)
    {
        getChildren(vertex.getEdges().get(i).otherVertex(), fatherName, accessibleVertex);
    }
}

private static void addIfUnique(char name, ArrayList<Character> accessibleVertex)
{
    boolean uniqueVertex = true;

    for(int i=0; i < accessibleVertex.size(); i++)
    {
        if(accessibleVertex.get(i).equals(name))
            uniqueVertex = false;
    }

    if(uniqueVertex)
        accessibleVertex.add(name);
}

这给了我这个结果:

enter image description here

搜索给了我相同或类似的代码片段,这些代码段不能达​​到我的预期。

编辑2

我放弃了这个搜索,并使用了样式表,重新构建了我认为合适的样式。

我仍然想知道......在PyQt中,是否有可能在仅更改小部件的某些部分时复制原生样式?

编辑3

我试过了:

dl_btt.setStyleSheet("background-color: green; color: white")

但我收到了这个错误:

dl_btt = DownloadButton(self, "Skini")

#dl_btt.setStyleSheet("background-color: green; color: white")
#dl_btt.setPalette(QtGui.QPalette(QtCore.Qt.green))

palette = dl_btt.palette()

role = dl_btt.foregroundRole()
palette.setColor(role, QtGui.QColor('white'))

role = dl_btt.backgroundRole()
palette.setColor(role, QtGui.QColor('green'))

dl_btt.setAutoFillBackground(True)
dl_btt.setPalette(palette)

如何访问按钮角色?怎么称呼?

万一你需要它,这里是DownloadButton类:

    palette = dl_btt.palette()
    role = dl_btt.foregroundRole()
    palette.setColor(role, QtGui.QColor('white'))

    role = dl_btt.buttonRole()
    palette.setColor(role, QtGui.QColor('green'))

    dl_btt.setAutoFillBackground(True)
    dl_btt.setPalette(palette)

2 个答案:

答案 0 :(得分:0)

我尝试了此方法。我已经在UI部分设置了按钮样式。 如果我只想更改按钮的颜色,则可以进行以下操作。

以下方法虽然不是一种优雅的方法,但仍然有效:

        btns = ['self.hBeamBtn','self.lBeamBtn','self.allTestBtn','self.prnStatusBtn']
        for btn in btns:
            if  str(btn_name) == str(btn):
                styl = btn+'.setStyleSheet("font: bold;background-color: red;font-size: 12px;height: 28px;width: 80px;")'
                eval(styl)

答案 1 :(得分:0)

这是一种愚蠢但可行的方法:

{
  "index": {
    "_index": "pariss",
    "_type": "sig",
    "_id": 1
  }
}{
  "fields": {
    "_id_osm": 416747747,
    "_categorie": "",
    "_name": [
      ""
    ],
    "_location": [
      36.1941834,
      5.3595221
    ]
  }
}