Не знаю PyQt, но ты подписываешься на слот textChanged(), а потом в нём же снова изменяешь текст, вызывая setHtml(), следовательно, textChanged() вызывается снова и так до бесконечности.
Хм, сейчас посмотрел, у QLineEdit есть сигнал textChanged(), который и нужно вызывать в таких случаях, как у тебя и не захламлять код с блокировкой сигналов. Это даже в документации написано: