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
