如果使用带有自定义属性的选择器,则忽略设置了样式表的PyQt QFrame边框

时间:2015-07-17 08:37:53

标签: python-2.7 css-selectors pyqt4

在使用PyQt 4.7的python 2.7中,我开发了一个具有以下结构的复合小部件:

  • InfoPanel(具有自定义属性CssStyle的QFrame)
    • 外面板(QFrame)
      • InnerPanel(QFrame)
        • 标题(QLabel)
        • line(Line)
        • 说明(QLabel)

这是我申请的样式表:

InfoPanel {
    border: 0px;
    background-color: transparent;
}
InfoPanel[CssStyle=""] #OuterPanel {
    background-color: blue;
    border-style: solid;
    border-color: green;
    border-width: 40px 96px 10px 96px;
}
InfoPanel[CssStyle="HeaderSize"] #OuterPanel {
    background-color: blue;
    border-style: solid;
    border-color: red;
    border-width: 10px 96px 0px 96px;
}
InfoPanel[CssStyle=""] #Title {
    color: #ffffff;
    font-size: 24pt;
}
InfoPanel[CssStyle=""] #Description {
    color: #ffffff;
    font-size: 12pt;
}
InfoPanel[CssStyle="HeaderSize"] #Title {
    color: #ffffff;
    font-size: 12pt;
}
InfoPanel[CssStyle="HeaderSize"] #Description {
    color: #ffffff;
    font-size: 8pt;
}

这是InfoPanel小部件中的python方法,它显示自己设置自定义属性:

def showInfo(css_style='') {
    self.setVisible(True)
    self.setProperty('CssStyle', css_style)
    self.style().unpolish(self)
    self.style().polish(self)
    self.update()
    self.InnerPanel.style().unpolish(self.InnerPanel)
    self.InnerPanel.style().polish(self.InnerPanel)
    self.InnerPanel.update()
    self.OuterPanel.style().unpolish(self.OuterPanel)
    self.OuterPanel.style().polish(self.OuterPanel)
    self.OuterPanel.update()
    self.Title.style().unpolish(self.Title)
    self.Title.style().polish(self.Title)
    self.Title.update()
    self.line.style().unpolish(self.line)
    self.line.style().polish(self.line)
    self.line.update()
    self.Description.style().unpolish(self.Description)
    self.Description.style().polish(self.Description)
    self.Description.update()
}

如果我运行 showInfo(),我可以看到绿色边框,如果我运行 showInfo('HeaderSize')我可以看到红色边框;但无论如何,子窗口小部件忽略边框,我可以看到位于左上角边框上的标题窗口小部件!

这是一个错误还是我错了? 有人可以帮帮我吗?

0 个答案:

没有答案