2013-04-02 38 views
1

我正在一个GUI中,我必须显示一些ToolButtons。 我正在使用外部CSS文件来设置它们的样式。 为了简化我定义的CSS类(使用setProperty),并使用CSS文件来根据类改变按钮的外观。PyQt样式与CSS类失败

我的Python代码如下所示:

... 
bt = QtGui.QToolButton(parent.qtObject) 
bt . setToolButtonStyle (QtCore.Qt.ToolButtonTextUnderIcon) 
bt.setProperty('class','StaticButton') 
bt.setStyleSheet(css_content) 
... 

我的CSS是这样的:

QToolButton.StaticButton 
{ 
    border: 2px solid #4f4f51; 
    border-radius: 5px; 
    font-size: 10px; 
    background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #e4e4c8, stop: 1 #b9b9a9); 
} 

的问题是,只有按钮的背景会受到影响。我尝试了许多替代方法,如CSS文件中的QToolButton[class=StaticButton].StaticButton。两种选择都导致了保存行为。 如果我直接套用CSS的按钮用:

bt.setStyleSheet("border: 2px solid #4f4f51;border-radius: 5px;font-size: 10px;background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #e4e4c8, stop: 1 #b9b9a9);") 

所有作品完美,但我不希望有CSS在我的Python代码。

有人可以告诉我我的代码有什么问题吗?我不明白为什么使用背景属性,但不是其他的。

注意:我检查了导入的CSS文件是完全有效的。我做了几次测试,每次只有背景属性起作用......发生了什么?

感谢

回答

1

根据参考表设置属性将必须工作,但有一个烦人的事情。 ps:我遇到这个问题大概一个月,然后承认失败。

我的解决方案即将解决。有点hacky

bt = QToolButton(.) 
bt.setObjectName("btStaticxxx") # xxx to any string 

css;

QToolButton#btStatic* //collapses all ToolButton instances that objectname startswith btStatic 
{ 
. 
. 
} 
+0

您的意思是说,我们需要在CSS中的类名之后使用'*'吗? – ibi0tux

+0

QToolButton上的'_ * _'#btStatic *是一个通配符。 #btStatic *折叠'btStaticmybutton'或'btStatic2'。 – cengizkrbck