2015-01-23 5 views
0

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

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 отливка как self.setInterval (интермедиат (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) 

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

+1

Я не работаю с pyqt, но я уверен, что 'connect' ожидает функцию или вызываемую. В этом случае вы должны делать что-то вроде 'self.radioButton_1s.clicked.connect (lambda: self.setInterval (1))' или, возможно, 'self.radioButton_1s.clicked.connect (lambda * args: self.setInterval (1)) ' – Kevin

+0

self.radioButton_1s.clicked.connect (lambda * args: self.setInterval (1)) отлично работает. Спасибо. Не могли бы вы сформулировать это как ответ, чтобы я мог оценить его правильно? – camaro

+0

Хорошо. Я не хотел публиковать ответ, если бы не знал, что это действительно будет полезно, и это выглядит так :-) – Kevin

ответ

1

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

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

self.radioButton_1s.clicked.connect(lambda *args: self.setInterval(1)) 
+0

Спасибо, это было очень полезно. Это улучшило мое непонимание соединений с этим, что connets требуют FUNCTION. Я думал, что соединение - это просто триггер вызываемого метода. – camaro