Как добавить стили в виджеты внутри пользовательского Qwidget

#python #pyqt #pyqt5

Вопрос:

У меня есть пользовательский виджет, содержащий QLabel и пользовательскую метку(MessageLabel). Я хотел бы знать, как я могу добавить стили css в QLabel внутри пользовательского виджета.

Вот мой код.

 from PyQt5 import QtWidgets, QtCore
import sys


_style = """
    
    #MessageLabel{

    background-color: rgba(196, 195, 192, 100);
    color: white;
    padding: 10px;
    border-radius: 5px 5px 30px 5px;
    selection-color: black;
    selection-background-color: white;

    }
    
    #MessageDisplayWidget #InfoLabel{

    color: red;
    background-color: blue;

}
    
"""


class MessageLabel(QtWidgets.QLabel):

    def __init__(self, *args, **kwargs):
        super(MessageLabel, self).__init__(*args, **kwargs)
        self.setObjectName("MessageLabel")
        font = self.font()
        font.setPointSize(12)

        self.setFont(font)
        self.setMinimumWidth(100)
        self.setText("Hello World")


class MessageDisplayWidget(QtWidgets.QWidget):

    def __init__(self):
        super(MessageDisplayWidget, self).__init__()

        self.message_box_frame = QtWidgets.QFrame()
        self.vBoxLayout = QtWidgets.QVBoxLayout(self.message_box_frame)
        self.vBoxLayout.setSpacing(0)

        self.setLayout(self.vBoxLayout)

        self.message_lbl_layout = QtWidgets.QVBoxLayout()
        self.more_options_layout = QtWidgets.QHBoxLayout()
        self.more_options_layout.setContentsMargins(0, 0, 0, 0)

        self.vBoxLayout.addLayout(self.message_lbl_layout, 1)
        self.vBoxLayout.addLayout(self.more_options_layout, 0)

        self.message_text = MessageLabel() # this is a custom label

        self.info_label = QtWidgets.QLabel("time")  # this is the label I want to change
        self.info_label.setObjectName("InfoLabel")
        self.info_label.setFixedHeight(30)

        self.message_lbl_layout.addWidget(self.message_text)
        self.more_options_layout.addWidget(self.info_label)

        self.more_options_layout.setStretch(0, 1)
        self.more_options_layout.setAlignment(self.info_label, QtCore.Qt.AlignRight)

        self.setSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)

    win = MessageDisplayWidget()
    win.setStyleSheet(_style)

    win.show()

    sys.exit(app.exec_())

"""

                              QVboxlayout
                                    |
              - QVboxLayout(Message), QVboxLayout(MoreOptions) 
                        |                   |
                    MessageLabel        InfoLabel
"""

 

введите описание изображения здесь

Как показано на приведенном выше изображении, я хотел бы добавить стиль css к метке времени

Комментарии:

1. изменить на #MessageDisplayWidget, #InfoLabel{

2. @eyllanesc спасибо, что сработало

3. или только #InfoLabel{

4. @eyllanesc еще раз спасибо. Еще один вопрос будет #MessageDisplayWidget, QLabel{ относиться ко всем QLabel или только к ярлыкам внутри MessageDisplayWidget ?

5. ммм, тогда используйте MessageDisplayWidget > #InfoLabel{