Решается просто: надо пометить func декоратором
@QtCore.pyqtSlot()
def func(self, a=None, b=None):
print('a =', a)
Почему так происходит: В Qt у кнопок есть два типа сигнала clicked - один без аргументов, а второй с булевым аргументом checked. Второй применяется для кнопок, которые не отжимаются после нажатия. PyQt выбирает тип сигнала по наличию у слота аргументов. У вашего есть аргумент
a
, значит выбирается второй тип сигнала и передаётся False, как признак того, что кнопка отжимается после нажатия.