首页 > 解决方案 > 单击单选按钮后,用户定义的插槽不运行

问题描述

单击 QGroupBox 中的单选按钮后,我无法让自定义插槽工作。这是代码的相关部分(PySide2)

class ChooseTarget(QtWidgets.QGroupBox):
    def __init__(self, title=None):
        super().__init__(title)
        with open(definitions.JSON_PATH) as j_file:
            names = json.load(j_file)

        self.radios = [QtWidgets.QRadioButton(names['names'][i]) for i in range(11)] 

        self.radios[names['names'].index(names["lastTarget"])].setChecked(True)

        self.layout = QtWidgets.QGridLayout()
        self.button = QtWidgets.QPushButton("Ok")
        self.styleButton()

        self.addToLayout()

    def addToLayout(self): 
        for i in range(11):
            #adding radio buttons to grid layout
            if i < 4:
                self.layout.addWidget(self.radios[i],0,i)
            elif i >= 4 and i < 8:
                self.layout.addWidget(self.radios[i],1, i - 4)
            else:
                self.layout.addWidget(self.radios[i],2, i - 8)
            self.radios[i].clicked.connect(self.handleClick)
        self.layout.addWidget(self.button,2,3)

现在, handleclick只是一个带有打印功能的方法,并且我验证了它在单击单选按钮时永远不会运行。我也尝试过使用@Slot装饰器,或者使用 SIGNAL 和 SLOT 宏连接发送方和接收方的替代方法。

编辑: MainWidget 类是我主要展示的类。

class MainWidget(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.layout = QtWidgets.QVBoxLayout()
        self.layout.addWidget(self.mTableOfOils)
        self.layout.addWidget(self.text)

        self.mRadioButtons = ChooseTarget("Choose the target")

        self.layout.addLayout(self.mRadioButtons.layout)
        self.setLayout(self.layout)

if __name__ == "__main__":
     app = QtWidgets.QApplication([])
     widget = MainWidget()
     widget.resize(800, 600)
     widget.show()

     sys.exit(app.exec_())

标签: python-3.xradio-buttonsignals-slotspyside2

解决方案


在 MainWidget 类中,我只添加了 QGroupBox 的布局,但没有将单选按钮小部件添加到主布局中,现在它可以按预期工作


推荐阅读