QPushButton的QStyleSheet属性,带有空文本

时间:2014-08-08 16:18:53

标签: qt pyqt pyqt4 qtstylesheets

我试图做这样的事情:

QPushButton[text=""] {
    background-color: rgb(255, 0, 0);
}

QPushButton {
    background-color: rgb(0, 0, 0);
}

基本上,我的一些QPushButtons有文字,有些不是,我想要设计与那些没有文字的文本不同的风格。

如果我打开一个实际的字符串值,即

,这是有效的
QPushButton[text="Ok"] {
    background-color: rgb(255, 0, 0);
}

然后任何按钮说" Ok"有红色背景。但是,如果没有文字的按钮我会传递什么?

2 个答案:

答案 0 :(得分:2)

此样式表适用于我(Linux,Qt 5.3):

QPushButton[text] {
    background-color: "green";
}

QPushButton[text="some text"] {
    background-color: "red";
}

QPushButton {
    background-color: "blue";
}

答案 1 :(得分:0)


上次编辑:9/8/2014 1:05

好的,对不起我误解了这个问题。 我有同样的问题来设置空文本。但它适用于Qt Designer。 (为什么?我不知道。)而且我找不到其他财产。

我有解决方案,我通过继承它在isEmpty中创建我的属性“QPushButton”。并且,添加属性,像这样;

import sys
from PyQt4 import QtCore, QtGui

class customQPushButton (QtGui.QPushButton):
    def setPropertyIsStringEmpty (self, text):
        self.setProperty('isEmpty', QtCore.QVariant(False if len(text) > 0 else True))

    def setText (self, text):
        self.setPropertyIsStringEmpty(text)
        QtGui.QPushButton.setText(self, text)

class exampleQMainWindow (QtGui.QMainWindow):
    def __init__ (self):
        super(exampleQMainWindow, self).__init__()
        self.testQPushButton = customQPushButton(self)
        self.testQPushButton.setText('')
        self.setStyleSheet ('''
            QPushButton {
                color: rgb(255, 255, 255);
            }
            QPushButton[text="Ok"] {
                background-color: rgb(255, 0, 0);
            }
            QPushButton[isEmpty=true] {
                background-color: rgb(0, 0, 255);
            }
        ''')
        self.setCentralWidget(self.testQPushButton)
        self.testQPushButton.keyPressEvent = self.keyPressEvent

app = QtGui.QApplication([])
window = exampleQMainWindow()
window.show()
sys.exit(app.exec_())

您可以创建新对象。但是,如果由Qt Designer创建,我必须通过调用setPropertyIsStringEmpty (self, text)刷新属性。


此致


MESSAGE BY 9/8/2014 1:05 :这是我以前的帖子。如果没用,请避免使用它们。

  

有可能如果你创建了style sheet模式并把它放了   您想要设置的代码或语句中的style sheet

     

我有例子,这个例子显示我处理箭头(不仅仅是向下键)   按键事件并设置按钮的新颜色;

import sys
from PyQt4 import QtCore, QtGui

ENUM_COLOR_RED   = 0
ENUM_COLOR_GREEN = 1
ENUM_COLOR_BLUE  = 2

def getStyleSheetQPushButtonRed ():
    return '''
        QPushButton {
            color: rgb(255, 255, 255);
            background-color: rgb(255, 0, 0);
        }
    '''
def getStyleSheetQPushButtonGreen ():
    return '''
        QPushButton {
            color: rgb(255, 255, 255);
            background-color: rgb(0, 255, 0);
        }
    '''

def getStyleSheetQPushButtonBlue ():
    return '''
        QPushButton {
            color: rgb(255, 255, 255);
            background-color: rgb(0, 0, 255);
        }
    '''

class exampleQMainWindow (QtGui.QMainWindow):
    def __init__ (self):
        super(exampleQMainWindow, self).__init__()
        self.testQPushButton = QtGui.QPushButton('KM', self)
        self.setCentralWidget(self.testQPushButton)
        self.testQPushButton.keyPressEvent = self.keyPressEvent

    def setText (self, text, color):
        styleSheet = {
            ENUM_COLOR_RED   : getStyleSheetQPushButtonRed,
            ENUM_COLOR_GREEN : getStyleSheetQPushButtonGreen,
            ENUM_COLOR_BLUE  : getStyleSheetQPushButtonBlue
        } [color]()
        self.testQPushButton.setText(text)
        self.testQPushButton.setStyleSheet(styleSheet)

    def keyPressEvent (self, eventQKeyEvent):
        key = eventQKeyEvent.key()
        if key == QtCore.Qt.Key_Left:
            self.setText('LEFT', ENUM_COLOR_RED)
        elif key == QtCore.Qt.Key_Up:
            self.setText('UP', ENUM_COLOR_GREEN)
        elif key == QtCore.Qt.Key_Right:
            self.setText('RIGHT', ENUM_COLOR_BLUE)

app = QtGui.QApplication([])
window = exampleQMainWindow()
window.show()
sys.exit(app.exec_())
     

优点:您可以在按钮中添加与颜色无关的文字。

     

缺点:您有颜色style sheet随时都有设置事件声明。

     
     

这对于实现样式表很有用,我希望有帮助;

     

参考http://qt-project.org/doc/qt-4.8/stylesheet-syntax.html

     
     

此致