QPushButton切换的连接似乎在一开始就不会触发

时间:2018-12-12 23:40:22

标签: python pyqt pyqt4 qpushbutton

我正在连接一个QPushButton,它将在其中隐藏/显示框架中的小部件。

我使用.ui方法加载/创建了GUI。

对于这个QPushButton,我已经设置并检查了属性setChecked

class MyWindow(QtGui.QWidget):
    def __init__(self):
        ...
        # self.informationVisBtn, `setChecked` and `setCheckable` field is checked in the .ui file
        self.informationVisBtn.toggled.connect(self.setInfoVis)

    def setInfoVis(self):
            self.toggleVisibility(
                self.informationVisBtn.isChecked()
            )

    def toggleVisibility(self, value):
        if value:
            self.uiInformationFrame.show()
            self.informationVisBtn.setText("-")
        else:
            self.uiInformationFrame.hide()
            self.informationVisBtn.setText("+")

在第一次尝试加载代码时,我注意到informationVisBtn在被选中的同时显示了该框架,但文本未设置为-,而是保留为我的.ui文件中设置的+

除非在__init__()中,否则,如果我在设置连接之前添加了setInfoVis(),则只有文本会正确填充。

使用toggled不会一开始就触发状态吗?提前感谢您的答复。

1 个答案:

答案 0 :(得分:1)

状态变化时发出信号,并通知当时已连接的插槽。连接新插槽时,只有在连接后状态发生变化时才会通知该插槽,因此始终建议将状态更新为信号。另一方面,由于切换状态信息,因此不必创建setInfoVis()方法。

class MyWindow(QtGui.QWidget):
    def __init__(self):
        super(MyWindow, self).__init__()
        # ...
        self.informationVisBtn.toggled.connect(self.toggleVisibility)

        # update the state it has since the connection
        # was made after the state change
        self.toggleVisibility(
                self.informationVisBtn.isChecked()
            )

    @QtCore.pyqtSlot(bool)
    def toggleVisibility(self, value):
        self.uiInformationFrame.setVisible(value)
        self.informationVisBtn.setText("-" if value else "+")