Checkable [QGroupBox] 反转 False/True 到 Block/Unblock 的内容项
Checkable [QGroupBox] reverse False/True to Block/Unblock The content items
正常运行:
- 如果选中>所有字段都处于活动状态!
- 如果不选中 > 所有字段都被阻止!
有什么办法可以扭转这种局面?
我想在用户检查时阻止 QGroupBox 内的所有小部件。
一个可能的解决办法是只改变绘制,即如果QGroupBox的checked属性状态为true则不绘制checkbox,否则绘制checkbox。
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()
正常运行:
- 如果选中>所有字段都处于活动状态!
- 如果不选中 > 所有字段都被阻止!
有什么办法可以扭转这种局面? 我想在用户检查时阻止 QGroupBox 内的所有小部件。
一个可能的解决办法是只改变绘制,即如果QGroupBox的checked属性状态为true则不绘制checkbox,否则绘制checkbox。
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()