Blokowanie liter w TextEdit. Zamiana znaku przecinka na znak kropki.

0

Posiadam program z około 30 TextEdit-ami (z PyQt), które służą do wprowadzania matematycznych danych wejściowych.

Jak napisać kod blokujący wpisywanie znaków inne niż cyfry, kropka czy przecinek (np. liter)? Blokowanie lub wyświetlenie okna o błędnym wprowadzeniu danych.
Jak napisać kod (oprócz użycia funkcji if), żeby program interpretował przecinek jako kropkę?

1
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
1

TextEdit do wprowadzania danych matematycznych do obliczeń? Na pewno TextEdit? TextEdit jest do edycji sformatowanego tekstu wieloliniowego więc trochę średnio się do tego nadaje. Chyba, że faktycznie chcesz parsować wprowadzony tekst i obliczać bardziej złożone działania. Jeżeli tak to QTextEdit przechowuje obiekt QTextDocument na którym możesz swobodnie pracować przy pomocy QTextCursor jak w zwykłym edytorze tekstu. Między innymi możesz zaznaczyć fragment wprowadzonego tekstu i sprawdzić poprawność wprowadzonych danych.

Jeżeli jednak zależy Ci na wprowadzaniu danych jedno-liniowych polecam QLineText dla którego możesz zdefiniować walidator i maskę które całkowicie załatwią sprawę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1