У тебя есть событие. Когда произошло событие, вызываются обработчики событий. Нажали на кнопку –> произошло событие “клик” –> вызвалась функция, которая меняет цвет окна. Кнопке пофигу, что будет делать эта функция. Ей просто нужно знать, какую именно функцию вызвать, а что она будет делать и что возвращать ей все равно. Ты же прикрепляешь к сигналу не функцию, а некий результат этой функции.
Предположим у тебя есть конвейер. На конвейере могут случаться внештатные ситуации. Например кончились болты на 8. Когда кончаются болты, какой-то датчик это регистрирует и инициирует событие, которое выражается в том, что в каптерке у дяди Васи загорается табло, на котором написано “Кончились болты на 8”. Дядя Вася обработчик, он должен пойти на склад, взять болтов, наполнить ящик и написать объяснительную записку начальнику (записка - это результат работы Дяди Васи).
Ты что делаешь, ты в маршрутной карте, указываешь в качесте обработчика события не Дядю Васю, а его результат - объяснительную записку, которая, естественно не может получить болты со склада.