@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, как признак того, что кнопка отжимается после нажатия.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
ROGII Новосибирск
от 150 000 до 250 000 ₽
ЭВРИКА Санкт-Петербург
от 80 000 до 120 000 ₽
22 янв. 2022, в 00:58
1000 руб./за проект
21 янв. 2022, в 22:52
47300 руб./за проект