string.replace(",", ".") #< == Zamienia przecinki na kropki.
while type(string) is not float:
try:
string = float(string)
except NameError:
[Wstawiasz okno o błędnym wprowadzeniu danych] # < == polecam też dodać pole do zmiany by pętla miała jakikolwiek sens inaczej się będzie wyświetlać w koło. Ewentualnie zamknąć te funkcję do której przekazano stringa. Wtedy redukujesz while.
[Wykonujesz dalsze instrukcje]
Niestety nie wiem jak zablokować wpisywanie znaków innych niż te które wskazałeś, ale powinieneś to znaleźć w instrukcji pyQT.
Ewentualnie gdy wpisujesz w polu tekstowym, to przypisujesz do jakiejś zmiennej, możesz sprawdzać w pętli czy są tylko dozwolone znaki - co jest niepolecanym przeze mnie sposobem, ale najłatwiejszym.
string = [nasza zmienna reprezentująca treść w polu]
for i in string[::-1]:
if i not in "0123456789,.":
string.replace(i, "")
break
else: #Gdy pole jest puste, lub nie zawiera znaków które wywołają break wykona się else. Jest to czasem przydatne by działać w tle na innym wątku.
pass