Python3, pyqt5: ошибка NoneType при установке значения в radioButton connect

У меня есть три радиокнопки, которые должны выбирать временные интервалы 1с 10с и любые. Я создал следующие подключения, но получаю сообщение об ошибке, что аргумент 1 имеет неожиданный тип «NoneType».

self.radioButton_1s.clicked.connect(self.setInterval(1))
self.radioButton_10s.clicked.connect(self.setInterval(10))
self.radioButton_any.clicked.connect(self.setInterval(0))

Выполнение int-cast как self.setInterval(int(1)) не имеет значения.

Вызванный метод следующий. Я знаю, что математика не жесткая, но проблема не в этом. Обычно doubleSpinBox читает такие значения, как 0,25 0,1 или подобные.

@QtCore.pyqtSlot()
def setInterval(self,i):

    if i == 1:
        n = 1/self.doubleSpinBox_TimeIndexStep.value() #TODO: use math.floor/ceiling to geht integers
        self.spinBox_CopyInterval.setEnabled
        self.spinBox_CopyInterval.setValue(n)
    elif i == 10:
        n = 10/self.doubleSpinBox_TimeIndexStep.value()
        self.spinBox_CopyInterval.setEnabled
        self.spinBox_CopyInterval.setValue(n)

Что мне нужно изменить, чтобы установить правильное значение?


person camaro    schedule 23.01.2015    source источник
comment
Я не работаю с pyqt, но могу поспорить, что connect ожидает функцию или вызываемый объект. В этом случае вы должны сделать что-то вроде self.radioButton_1s.clicked.connect(lambda: self.setInterval(1)) или, может быть, self.radioButton_1s.clicked.connect(lambda *args: self.setInterval(1))   -  person Kevin    schedule 23.01.2015
comment
self.radioButton_1s.clicked.connect(lambda *args: self.setInterval(1)) прекрасно работает. Спасибо. Не могли бы вы сформулировать это как ответ, чтобы я мог правильно оценить его?   -  person camaro    schedule 24.01.2015
comment
Ok. Я не хотел публиковать ответ, если не знал, что он действительно будет полезен, что, похоже, сейчас так и есть :-)   -  person Kevin    schedule 24.01.2015


Ответы (1)


connect выглядит как типичная функция регистрации обратного вызова. Он ожидает получить функцию или вызываемый объект, но вы передаете возвращаемое значение setInterval, которое равно None.

Если вы хотите, чтобы переключатель вызывал setInterval при выборе, вам нужно создать функцию, которая будет вызывать setInterval, и вместо этого передать ее в качестве аргумента connect. Самый короткий способ сделать это с помощью лямбды.

self.radioButton_1s.clicked.connect(lambda *args: self.setInterval(1))
person Kevin    schedule 24.01.2015
comment
Спасибо, это было очень полезно. Это улучшило мое понимание соединений до того, что соединения требуют ФУНКЦИИ. Я думал, что коннект — это просто триггер вызываемого метода. - person camaro; 24.01.2015