代码之家  ›  专栏  ›  技术社区  ›  ymmx

在PyQt5中修改Qgroupbox的边框颜色,而不修改其内部小部件的边框

  •  1
  • ymmx  · 技术社区  · 8 年前

    我试图修改groupbox的颜色边框,但当我这样做时,它也会修改内部小部件的边框,如:

    enter image description here

    但我想得到这样的结果: enter image description here

    以下是我目前掌握的代码:

    import sys
    from PyQt5.QtGui import *
    from PyQt5.QtCore import *
    from PyQt5.QtWidgets import * 
    
    class tabdemo(QMainWindow):
        def __init__(self):
            super(tabdemo, self).__init__()
            self.setGeometry(50,50,500,500)
            self.centralWidget = QWidget()
            self.setCentralWidget(self.centralWidget)
            self.mainB  = QVBoxLayout()
    
            self.GB = QGroupBox("GroupBox")
            self.GB.setStyleSheet("QGroupBox { border: 1px solid red;}")
            self.GB.setFixedWidth(100)
            self.mainHBOX  = QVBoxLayout()
    
            self.GB1 = QGroupBox("GroupBox1")
            self.GB1.setFixedHeight(100)
            self.GB2 = QGroupBox("GroupBox2")
            self.GB2.setFixedHeight(100)
            self.GB3 = QGroupBox("GroupBox3")
            self.GB3.setFixedHeight(100)
            self.mainHBOX.addWidget(self.GB1)
            self.mainHBOX.addWidget(self.GB2)
            self.mainHBOX.addWidget(self.GB3)
    
            self.GB.setLayout(self.mainHBOX)
    
            self.mainB.addWidget(self.GB)
    
            self.centralWidget.setLayout(self.mainB)
    
    
    
    
    
    def main():
       app = QApplication(sys.argv)
       ex = tabdemo()
       ex.show()
       sys.exit(app.exec_())
    
    if __name__ == '__main__':
       main()
    

    重要的一点是 self.GB.setStyleSheet("QGroupBox { border: 1px solid red;}") . 它会改变边框颜色,但也会将颜色传播到子框,我不希望这样。

    有人有办法吗?

    2 回复  |  直到 8 年前
        1
  •  6
  •   armatita zgoda    8 年前

    您需要命名对象(GroupBox),并将样式表直接应用于名称。将此添加到代码中:

            self.GB.setObjectName("ColoredGroupBox")  # Changed here...
            self.GB.setStyleSheet("QGroupBox#ColoredGroupBox { border: 1px solid red;}")  # ... and here
    

    这是您修改后的代码:

    import sys
    from PyQt5.QtGui import *
    from PyQt5.QtCore import *
    from PyQt5.QtWidgets import *
    
    class tabdemo(QMainWindow):
        def __init__(self):
            super(tabdemo, self).__init__()
            self.setGeometry(50,50,500,500)
            self.centralWidget = QWidget()
            self.setCentralWidget(self.centralWidget)
            self.mainB  = QVBoxLayout()
    
            self.GB = QGroupBox("GroupBox")
            self.GB.setObjectName("ColoredGroupBox")  # Changed here...
            self.GB.setStyleSheet("QGroupBox#ColoredGroupBox { border: 1px solid red;}")  # ... and here
            self.GB.setFixedWidth(100)
            self.mainHBOX  = QVBoxLayout()
    
            self.GB1 = QGroupBox("GroupBox1")
            self.GB1.setFixedHeight(100)
            self.GB2 = QGroupBox("GroupBox2")
            self.GB2.setFixedHeight(100)
            self.GB3 = QGroupBox("GroupBox3")
            self.GB3.setFixedHeight(100)
            self.mainHBOX.addWidget(self.GB1)
            self.mainHBOX.addWidget(self.GB2)
            self.mainHBOX.addWidget(self.GB3)
    
            self.GB.setLayout(self.mainHBOX)
    
            self.mainB.addWidget(self.GB)
    
            self.centralWidget.setLayout(self.mainB)
    
    def main():
       app = QApplication(sys.argv)
       ex = tabdemo()
       ex.show()
       sys.exit(app.exec_())
    
    if __name__ == '__main__':
       main()
    

    结果是:

    Name widget and add stylesheet to it

        2
  •  2
  •   James    5 年前

    我注意到,对外部GroupBox的更改将标签向下移动。我想你也需要

    设置样式表(“QGroupBox::标题{padding 0 3 px}”)