Похоже, что переключаемое соединение QPushButton не запускается при запуске - PullRequest
0 голосов
/ 13 декабря 2018

Я подключаю QPushButton, в котором он будет либо скрывать / показывать виджеты внутри фрейма.

Я загрузил / создал свой графический интерфейс с помощью метода .ui.

Для этого 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 голосов
/ 13 декабря 2018

Сигнал испускается при изменении состояния и уведомляет слоты, подключенные до этого момента.Когда подключен новый слот, он будет уведомлен только в случае изменения статуса после подключения, поэтому всегда рекомендуется обновлять статус в виде сигналов.С другой стороны, нет необходимости создавать метод 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 "+")
...