@w0lkolak

Откуда PyQt берёт False для функции в qt слоте?

Есть виджет кнопка. Нажатие на которую приконекчено к функции
def func(self,  a=None, b=None):
      print('a =', a)

self.but.clicked.connect(self.anothe_object.func)


Я нажимаю на кнопку и получаю a=False.
Если сделать connect к lambda: func() то все работает нормально и a=None.

Что, собственно, происходит?
  • Вопрос задан
  • 56 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Решается просто: надо пометить func декоратором
@QtCore.pyqtSlot()
def func(self,  a=None, b=None):
      print('a =', a)


Почему так происходит: В Qt у кнопок есть два типа сигнала clicked - один без аргументов, а второй с булевым аргументом checked. Второй применяется для кнопок, которые не отжимаются после нажатия. PyQt выбирает тип сигнала по наличию у слота аргументов. У вашего есть аргумент a, значит выбирается второй тип сигнала и передаётся False, как признак того, что кнопка отжимается после нажатия.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы