在Pyside2中激活时使小部件边框变为彩色

问题描述

我的pyside2窗口应用程序中有一组三个qradiobutton和三个qgroupboxes。 当我单击一个单选按钮时,将启用一个组框。

enter image description here

if self.ui.radioButton_1.isChecked():
    self.ui.groupBox_1.setEnabled(True)
    self.ui.groupBox_2.setEnabled(False)
    self.ui.groupBox_3.setEnabled(False)    
elif self.ui.radioButton_2.isChecked():
    self.ui.groupBox_1.setEnabled(False)
    self.ui.groupBox_2.setEnabled(True)
    self.ui.groupBox_3.setEnabled(False)    
elif self.ui.radioButton_3.isChecked():
    self.ui.groupBox_1.setEnabled(False)
    self.ui.groupBox_2.setEnabled(False)
    self.ui.groupBox_3.setEnabled(True)

是否可以通过实现样式或在Qt Designer中启用某些选项来使选定的qgroupbox的边框在激活时着色?像这样:

enter image description here

绿线的确切宽度并不重要,只有彩色边框变亮才重要。

解决方法

您可以在QGroupBox的样式表中使用:enabled伪状态设置边框。

import sys
from PySide2.QtWidgets import *

class Template(QWidget):

    def __init__(self):
        super().__init__()
        grid = QGridLayout(self)
        for i in range(3):
            radio_btn = QRadioButton(f'RadioButton_{i + 1}',checked=not i)
            group_box = QGroupBox(f'GroupBox_{i + 1}',enabled=not i)
            radio_btn.toggled[bool].connect(group_box.setEnabled)
            hbox = QHBoxLayout(group_box)
            hbox.addWidget(QLabel(f'Test_{i + 1}'))
            hbox.addWidget(QLineEdit())
            grid.addWidget(radio_btn,i,0)
            grid.addWidget(group_box,1)

        self.setStyleSheet('''
        QGroupBox {
            margin-top: 1ex;
        }
        QGroupBox:enabled {
            border: 3px solid green;
        }
        QGroupBox::title {
            subcontrol-origin: margin;
            left: 1ex;
        }''')


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Template()
    window.show()
    sys.exit(app.exec_())

enter image description here