从QWidgetItem类对象访问'isChecked'属性

问题描述 投票:0回答:1

我正在QStackedLayout小部件的各层中动态创建UI元素。我创建了一个生成器,用于存储目标堆栈式小部件层的对象,以便可以在需要时收集使用该层中包含的UI元素进行的设置。我确定已经隔离了一个单选按钮,但是我不知道如何访问'isChecked()'属性。如果我将此项目隔离并使用此行存储为变量(“ items”是Generator):

target_radio_button = items.__next__()

我知道这个QWidgetItem是QRadioButton,我如何进入'isChecked'属性来查询是否被检查?如果我使用以下方法打印隔离对象的类型:

print (type(target_radio_button))

这是返回的内容:

<class 'PySide2.QtWidgets.QWidgetItem'>

这是要求的最少代码:

from PySide2 import QtWidgets
import sys

class Test(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(Test, self).__init__(parent)

        self.setWindowTitle("Test")
        self.setGeometry(50, 50, 200, 200)
        self.test_layout = QtWidgets.QVBoxLayout()
        self.setLayout(self.test_layout)
        self.main_stacked_layout = QtWidgets.QStackedLayout()
        self.test_layout.addLayout(self.main_stacked_layout)
        self.widget = QtWidgets.QWidget()
        self.widget_layout = QtWidgets.QVBoxLayout()
        self.widget.setLayout(self.widget_layout)
        self.radio = QtWidgets.QRadioButton('Sample Radio Button')
        self.h_layout = QtWidgets.QHBoxLayout()
        self.h_layout.addWidget(self.radio)
        self.widget_layout.addLayout(self.h_layout)
        self.layout_container = [self.widget]
        self.main_stacked_layout.addWidget(self.widget)
        self.demo()

    def demo(self):
        target_widget = self.layout_container[0]
        target_layout = target_widget.layout()

        for layout_item in target_layout.findChildren(QtWidgets.QHBoxLayout):
            items = (layout_item.itemAt(i) for i in range(layout_item.count()))
            self.get_settings_value(items, 'Boolean')

        # for item in target_layout.findChildren(QtWidgets.QRadioButton):
        #     print (item.text())
        #     print (item.isChecked())

    def get_settings_value(self, items, value_type):
        if value_type == 'Boolean':
            target_radio_button = items.__next__()
            print (type(target_radio_button))
            #print (target_radio_button.isChecked())


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    form = Test()
    form.show()
    sys.exit(app.exec_())

我评论了两个区域-我禁用的第一个块演示了一种我可以看到的信息,该信息可以获取我想要的信息,但是它的用途不充分。我需要的是捕获目标布局中的子级,而无需过滤特定类型(在示例代码中,这将用于QRadioButton)。我想将找到的那一组孩子发送到简化的“ get_settings_value”函数,然后从那里找出有关要查找的内容的说明。我打算有多个不同的“ value_type”参数来提取取决于UI小部件的值。第二个注释掉的区域是print语句,用于检查元素'isChecked()'。这引发了错误,并且我正在尝试了解如何获得对该属性的访问。

python pyside2
1个回答
0
投票

itemAt()方法返回作为通用容器的itemAt(),其派生类为QLayoutItemQLayoutItemQLayout。因此,如果要获取QLayout的小部件,则必须使用widget()方法:

QSpacerItem
© www.soinside.com 2019 - 2024. All rights reserved.