Я получаю странную ошибку, и хотя я могу ее обойти, мне интересно, знает ли кто-нибудь, что здесь происходит. Если я устанавливаю сигнал и имею метод под названием connect
, тогда метод подключения сигналов заменяется классом.
Понадобилось немало времени, поскольку я использовал метод connect
, чтобы связать пользовательский интерфейс с функциями, и это определенно не питоническое поведение, поэтому мой главный вопрос - почему это происходит?
Вот пример, вызывающий ошибку PyQt signal connect() takes exactly 1 argument (4 given)
:
class MainWindow(QtWidgets.QMainWindow):
testSignal = QtCore.Signal()
def __init__(self, parent=None, **kwargs):
super(MainWindow, self).__init__(parent, **kwargs)
self.testSignal.connect(lambda:None)
def connect(self):
pass
Если вы дадите connect
3 входа аргумента и вернете True
, то сигнал будет удовлетворительным.
Попробуйте отладить его, используя:
class MainWindow(QtWidgets.QMainWindow):
testSignal = QtCore.Signal()
def __init__(self, parent=None, **kwargs):
super(MainWindow, self).__init__(parent, **kwargs)
self.testSignal.connect(self.debug)
def debug(self, *args, **kwargs):
print("got", args, "and", kwargs)
чтобы вы могли видеть, какие значения передаются вашему устройству обработки сигналов debug
.
Проблема не в том, что возвращают сигналы, а в том, что у меня не может быть MainWindow.connect
или он перезаписывает QtCore.Signal.connect
, что кажется действительно странным поведением Python.
Так работает pyside. Если вы думаете, что это неправильно, нет смысла сообщать об этом здесь: вам нужно обсудить это с разработчиками pyside.