So langsam verzweifel ich ein wenig an QT.
Ich habe folgendes gemacht. Um zu verhindern, das falsche Werte in Zellen eingefügt werden können habe ich zwei Delegate Klassen erstellt. Diese sollen einmal sollen nur Datumswerte und Währungswerte als Eingabe zulassen. Dass das regex evtl noch verfeinert werden muss, steht auf einem anderen Blatt.

In der aktuellen Konstellation wird die Falscheingabe des Rechnungswertes verhindert aber die der beiden Daten zugelassen
Die Tabelle ist wie folgt aufgebaut:
Rechnungsdatum|Rechnungsbetrag|Bezahlt|Zahldatum
Code: Alles auswählen
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class ValidatedCurrencyItemDelegate(QStyledItemDelegate):
def createEditor(self, widget, option, index):
if not index.isValid():
return 0
if index.column() == 1:
print("ValidatedCurrencyItemDelegate")
editor = QLineEdit(widget)
# Todo
# Regex wegen eingaben wie 23,...,,,... verbessern
validator = QRegExpValidator(QRegExp("\d+(\,|\.)*\d{0,2}"), editor)
editor.setValidator(validator)
return editor
return super(ValidatedCurrencyItemDelegate, self).createEditor(widget, option, index)
class ValidatedDateItemDelegate(QStyledItemDelegate):
def createEditor(self, widget, option, index):
if not index.isValid():
return 0
if index.column() == 0 or index.column() == 3: #only on the cells in the first column
print("ValidatedDateItemDelegate")
editor = QLineEdit(widget)
validator = QRegExpValidator(QRegExp("\d{1,2}\.\d{1,2}.\d{4}"), editor)
editor.setValidator(validator)
return editor
return super(ValidatedDateItemDelegate, self).createEditor(widget, option, index)
In diesem Fall wird nur der Geldwert geprüft
Code: Alles auswählen
model = TableModel(my_array)
model.setHeaderData(0, QtCore.Qt.Horizontal, "Test")
self.dataTBL.setModel(model)
self.dataTBL.setItemDelegateForColumn(2, CheckBoxDelegate(self.dataTBL))
self.dataTBL.setItemDelegate(ValidatedDateItemDelegate()) #Datums überprüfung
self.dataTBL.setItemDelegate(ValidatedCurrencyItemDelegate()) #Geldbetragspüberprüfung
self.theSelectionModel = self.dataTBL.selectionModel()
Ich hatte dann noch Versuch, alles in eine Klasse zu packen:
Code: Alles auswählen
class ValidateItems(QStyledItemDelegate):
def createEditor(self, widget, option, index):
if not index.isValid():
return 0
if index.column() == 1:
editor = QLineEdit(widget)
validator = QRegExpValidator(QRegExp("\d+(\,|\.)*\d{0,2}"), editor)
editor.setValidator(validator)
return editor
elif index.column() == 0 or index.column() == 3:
editor = QLineEdit(widget)
validator = QRegExpValidator(QRegExp("\d{1,2}\.\d{1,2}.\d{4}"), editor)
return editor
return super(ValidateItems, self).createEditor(widget, option, index)
VG niesel