【问题标题】:Style Sheets for Multiple QWidgets in PyQt5?PyQt5 中多个 QWidget 的样式表?
【发布时间】:2020-09-03 10:52:45
【问题描述】:

如何在 PyQt5 中为多个 QLabels 或多个 Qwidgets 创建样式表?

例如,在我的程序中,我使用了 8 个 QLabel,其中 4 个 QLabel 属于一个家庭/组,另外 4 个属于另一个家庭/组。现在我想为这两个系列创建一个单独的样式表。第一个家族(所有 4 个 QLabels)必须设置相同的属性(背景色、前景色、对齐方式和字体),第二个家族也必须设置不同的属性。

import sys
from PyQt5.QtWidgets import QWidget,QApplication,QLabel,QFormLayout

class Stylesheet_001(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Style Sheet Example_001")
        self.setMinimumSize(600,800)
        self.setMaximumSize(600,800)
        self.mydesign()

    def mydesign(self):
        lbl_normal   = QLabel("Total Available Items :")
        lbl_starts   = QLabel("Item Starts With :")
        lbl_contains = QLabel("Items Contains Anywhere :")
        lbl_end      = QLabel("Items Ends With :")

        lbl_normal_count   = QLabel("500")
        lbl_starts_count   = QLabel('50,000')
        lbl_contains_count = QLabel('5')
        lbl_ends_count     = QLabel('0')

        mylayout = QFormLayout()
        mylayout.addRow(lbl_normal  ,lbl_normal_count)
        mylayout.addRow(lbl_starts  ,lbl_starts_count)
        mylayout.addRow(lbl_contains,lbl_contains_count)
        mylayout.addRow(lbl_end     ,lbl_ends_count)

        self.setLayout(mylayout)

def main():
    myapp = QApplication(sys.argv)
    mywindow = Stylesheet_001()
    mywindow.show()
    sys.exit(myapp.exec_())

if __name__ == "__main__":
    main()

1) lbl_normal, 2) lbl_strats, 3) lbl_contains, 4) lbl_ends 属于一个组(第一组),另外 4 个标签属于另一组(第二组)。

第一组必须设置相同,前景色:红色,字体:口径,10,粗体和右对齐。 第二组必须设置相同,前景色:绿色,字体:系统默认和左对齐。

【问题讨论】:

  • 你的问题不清楚,你能不能试着更好地解释你想要达到的目标?
  • @musicamante ,根据您的指南,现在我详细说明我的要求。

标签: python pyqt pyqt5 qtstylesheets


【解决方案1】:

试试看:

import sys
from PyQt5.QtWidgets import QWidget, QApplication, QLabel, QFormLayout,\
    QFrame, QVBoxLayout
from PyQt5.QtCore import Qt


class Stylesheet_001(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Style Sheet Example_001")
        self.setMinimumSize(600,800)
        self.setMaximumSize(600,800)
        self.mydesign()

    def mydesign(self):

        # Red, same font : Caliber, 10, Bold, and Alignment to Right 
        lbl_normal   = QLabel("Total Available Items :", alignment=Qt.AlignRight | Qt.AlignVCenter)
        lbl_normal.setMinimumWidth(180)
        lbl_starts   = QLabel("Item Starts With :", minimumWidth=180, alignment=Qt.AlignRight | Qt.AlignVCenter)
        lbl_contains = QLabel("Items Contains Anywhere :", minimumWidth=180, alignment=Qt.AlignRight | Qt.AlignVCenter)
        lbl_end      = QLabel("Items Ends With :", minimumWidth=180, alignment=Qt.AlignRight | Qt.AlignVCenter)

        lbl_normal_count   = QLabel("500")
        lbl_starts_count   = QLabel('50,000')
        lbl_contains_count = QLabel('5')
        lbl_ends_count     = QLabel('0')

        mylayout = QFormLayout(self) 
        mylayout.addRow(lbl_normal  , lbl_normal_count)
        mylayout.addRow(lbl_starts  , lbl_starts_count)
        mylayout.addRow(lbl_contains, lbl_contains_count)
        mylayout.addRow(lbl_end     , lbl_ends_count)


QSS = """
QWidget > QLabel[text="Total Available Items :"],
QWidget > QLabel[text="Item Starts With :"],
QWidget > QLabel[text="Items Contains Anywhere :"],
QWidget > QLabel[text="Items Ends With :"] {
    background-color: red; 
    color: white;
    font: bold 10pt \"Caliber\";
}
QWidget > QLabel {
    background-color: green; 
    color: yellow;
    font: 10pt \"Caliber\";
}
"""

def main():
    myapp = QApplication(sys.argv)
    myapp.setStyle('Fusion')
    myapp.setStyleSheet(QSS)
    mywindow = Stylesheet_001()
    mywindow.show()
    sys.exit(myapp.exec_())

if __name__ == "__main__":
    main()

【讨论】:

    【解决方案2】:

    试试看:

    import sys
    from PyQt5.QtWidgets import *
    from PyQt5.QtGui import *
    from PyQt5.QtCore import  *
    
    class Stylesheet_001(QWidget):
        def __init__(self):
            super().__init__()
            self.setWindowTitle("Style Sheet Example_001")
            self.setMinimumSize(600,800)
           # self.setMaximumSize(600,800)
            self.mydesign()
    
        def mydesign(self):
    
            lbl_normal   = QLabel("Total Available Items :")
            lbl_starts   = QLabel("Item Starts With :")
            lbl_contains = QLabel("Items Contains Anywhere :")
            lbl_end      = QLabel("Items Ends With :")
    
            lbl_normal.setStyleSheet(self.stylesheet_family_1())
            lbl_starts.setStyleSheet(self.stylesheet_family_1())
            lbl_contains.setStyleSheet(self.stylesheet_family_1())
            lbl_end.setStyleSheet(self.stylesheet_family_1())
    
            lbl_normal_count   = QLabel("500")
            lbl_starts_count   = QLabel('50,000')
            lbl_contains_count = QLabel('5')
            lbl_ends_count     = QLabel('0')
    
            lbl_normal_count.setStyleSheet(self.stylesheet_family_2())
            lbl_starts_count.setStyleSheet(self.stylesheet_family_2())
            lbl_contains_count.setStyleSheet(self.stylesheet_family_2())
            lbl_ends_count.setStyleSheet(self.stylesheet_family_2())
    
            self.mylayout = QFormLayout()
            self.mylayout.setSpacing(0)
            self.mylayout.addRow(lbl_normal  ,lbl_normal_count)
            self.mylayout.addRow(lbl_starts  ,lbl_starts_count)
            self.mylayout.addRow(lbl_contains,lbl_contains_count)
            self.mylayout.addRow(lbl_end     ,lbl_ends_count)
    
            self.myframe    = QFrame()
            self.mainlayout = QVBoxLayout()
            self.myframe.setFixedSize(400,300)
            self.myframe.setLayout(self.mylayout)
    
            self.mainlayout.addWidget(self.myframe)
            self.mainlayout.addStretch()
            self.setLayout(self.mainlayout)
    
        def stylesheet_family_1(self):
            return"""
            QLabel{
            background-color:'red';
            font-family: Caliber;
            font-style: normal;
            font-size:10pt;
            font-weight:normal;
            border-width:1px;
            border-color:black;
            border-top-color:black;
            border-style:outset;
            color:white;
            padding:6px;
            min-width:220px;
            qproperty-alignment:'AlignRight';   
            }
            """
        def stylesheet_family_2(self):
            return"""
            QLabel{
            background-color:'green';
            font-family: Caliber;
            font-style: normal;
            font-size:10pt;
            font-weight:bold;
            border-width:1px;
            border-color:black;
            border-top-color:black;
            border-style:outset;
            color:white;
            padding:1px;
            min-width:20px;
            qproperty-alignment:'AlignCenter|AlignRight';   
            }
            """
    
    
    def main():
        myapp = QApplication(sys.argv)
        mywindow = Stylesheet_001()
        mywindow.show()
        sys.exit(myapp.exec_())
    
    if __name__ == "__main__":
        main()
    

    【讨论】:

    • @bala 要了解更多 Qt - CSS 属性,请按以下方式操作:link
    • @kumar 的回答更适合我
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 2021-10-07
    相关资源
    最近更新 更多