首页 > 解决方案 > PyQt5 QGroupBox 与 QCheckBox - 关闭自动禁用

问题描述

我想使用一个可以选中的 QGroupBox,但是当 QGroupBox 复选框未选中时,我不会禁用 QGroupBox 的内容小部件。

来自参考:

checked : bool 此属性保存是否选中了组框

如果组框是可选中的,它会显示一个复选框。如果选中该复选框,则启用组框的子项;否则,孩子将被禁用并且用户无法访问。

默认情况下,选中的组框也被选中。

我想在 QGroupBox 标题栏中有一个复选框,但我不希望应用上述功能。

复选框逻辑将是全选、全选,因此当未选中复选框时,用户可以修改内部 QGroupBox 复选框元素。

我想保留一个界面-ui,如下所示:

也许我必须使用带有 QPaintEvent 或 QSS 样式表的 QFrame,但我不是这方面的专家。

在此处输入图像描述

编辑:如果可能的话,我还想要QGroupBox复选框的 triState。

编辑2:我试试这个代码:

self.main_self.ui_visible_player_list_fields_window.groupBox.changeEvent(QtCore.QEvent.EnabledChange).connect(lambda event:event.ignore())

但它有错误。

 self.main_self.ui_visible_player_list_fields_window.groupBox.changeEvent(QtCore.QEvent.EnabledChange).connect(lambda event:event.ignore())
TypeError: changeEvent(self, QEvent): argument 1 has unexpected type 'Type'

编辑:我认为以下代码将解决问题:

class Custom_QGroupBox(QtWidgets.QGroupBox):

    def __init__(self, parent=None):
        super(Custom_QGroupBox, self).__init__(parent)

    def changeEvent(self, event):
        if event.type() == QtCore.QEvent.EnabledChange:
            self.blockSignals(True)
            self.setEnabled(True)
            event.ignore()
            self.blockSignals(False)
        else:
            return super(Custom_QGroupBox, self).changeEvent(event)

但它没有:(

标签: pythonpyqt5qcheckboxqgroupbox

解决方案


我添加此代码:

self.main_self.ui_visible_player_list_fields_window.groupBox.blockSignals(True)
        self.main_self.ui_visible_player_list_fields_window.groupBox.setEnabled(True)
        
        for child_widget in self.main_self.ui_visible_player_list_fields_window.groupBox.children():
            try:
                child_widget.setEnabled(True)
            except:
                pass
        self.main_self.ui_visible_player_list_fields_window.groupBox.blockSignals(False)

在切换方法和是child_widget_checkbox.stateChanged.connect方法中,它可以工作。

唯一要完全回答这个问题的是 QGroupBox 的三态。


推荐阅读