0

普通手术:

  • 如果选中>所有字段都处于活动状态!
  • 如果未选中 > 所有字段都被阻止!

有什么办法可以扭转这种情况?当用户检查时,我想阻止 QGroupBox 内的所有小部件。

4

1 回答 1

2

一种可能的解决方案是仅更改绘制,即如果 QGroupBox 的选中属性的状态为真,则不绘制复选框,否则如果绘制复选框。

import sys
from PyQt5 import QtWidgets


class GroupBox(QtWidgets.QGroupBox):
    def paintEvent(self, event):
        painter = QtWidgets.QStylePainter(self)
        option = QtWidgets.QStyleOptionGroupBox()
        self.initStyleOption(option)
        if self.isCheckable():
            option.state &= ~QtWidgets.QStyle.State_Off & ~QtWidgets.QStyle.State_On
            option.state |= (
                QtWidgets.QStyle.State_Off
                if self.isChecked()
                else QtWidgets.QStyle.State_On
            )
        painter.drawComplexControl(QtWidgets.QStyle.CC_GroupBox, option)


def main():
    app = QtWidgets.QApplication(sys.argv)
    groupbox = GroupBox(checkable=True)
    groupbox.resize(640, 480)
    groupbox.show()

    vbox = QtWidgets.QVBoxLayout()

    for i in range(10):
        le = QtWidgets.QLineEdit()
        vbox.addWidget(le)

    groupbox.setLayout(vbox)

    sys.exit(app.exec_())


if __name__ == "__main__":
    pass
    main()
于 2021-05-01T00:48:35.723 回答