ich habe das unten stehende Tabellenmodel in der ein in der zweiten Spalte Geldwerte dargestellt werden sollen. Das heißt, die Daten werden als Integerwert in der DB gespeichert. Damit der Wert in der Tabelle schön als Währungswert ausgegeben wird aber ich folgende Formatierungfunktion geschrieben
Code: Alles auswählen
class Currency:
def get_Curr_format(self, value):
value = value.replace('€','').replace(',','.')
value_f = float(value)
c = "{p:8.2f}".format(p=value_f)
#print(c)
return c
Code: Alles auswählen
value = str(curr_format.get_Curr_format(value)).replace('.',',') + " €"
Nun möchte aber verhindern, dass falsche Werte wie Buchstaben o.Ä. eingebenb werden können. Dazu war die Idee, einfach mit einer Exception eine Fehlermeldung auszugeben und den alten Wert wieder in die Zelle zu schreiben (tmp_value). Das ist mir bisher noch nicht gelungen.
Liegt der Fehler darin, dass ich das in der Displayrole versuche. Was muss ich tun, damit dieser Wert beim Fehlerfall eingetragen wird?
Code: Alles auswählen
from PyQt5 import QtCore
from PyQt5 import QtGui
from PyQt5 import Qt
from FormatTools.Currency import *
class TableModel(QtCore.QAbstractTableModel):
...
def data(self, index, role):
curr_format = Currency()
if role == QtCore.Qt.EditRole:
row = index.row()
column = index.column()
print(self._data[row][column])
print(type(self._data[row][column]))
if column == 1:
value = self._data[row][column].replace('.', ',')
return value
return self._data[row][column]
if role == QtCore.Qt.DisplayRole:
row = index.row()
column = index.column()
value = self._data[row][column]
value_tmp = self._data[row][column]
if column == 1:
try:
value = str(curr_format.get_Curr_format(value)).replace('.',',') + " €"
return value
except ValueError as e:
return value_tmp #alten Wert der Zelle bei Fehlerfall zurückgeben
print("Value Error: ", e)
return value
if role == QtCore.Qt.CheckStateRole:
column = index.column
if column == 2:
return Qt.QCheckBox