0

テーブルに入力されているデータを正規表現を使用して検証できるように、カスタム デリゲートを作成しようとしていますが、何らかの理由でコードがエラーをスローし続けます。適切な構造化された例はありますか?

これらは現在発生している 2 つのエラーですAttributeError: 'QLineEdit' object has no attribute 'set'。QLineEdit.setText を使用して修正すると、正規表現が機能せず、任意の値を追加できます。

Traceback (most recent call last):
  File "F:\Computing\Program V3\stockGui.py", line 23, in setEditorData
    editor.set(text)
AttributeError: 'QLineEdit' object has no attribute 'set'
Traceback (most recent call last):
  File "F:\Computing\Program V3\stockGui.py", line 29, in setModelData
    model.setData(index, QVariant(editor.text()))
NameError: name 'QVariant' is not defined






class ProductDelegate(QtSql.QSqlRelationalDelegate):
    def __init__(self):
        super().__init__()      

    def createEditor(self, parent, option, index):
        if index.column() == 1:
            editor = QtGui.QLineEdit(parent)
            regex = QtCore.QRegExp(r"(?:[A-Z|\s]+)")
            validator = QtGui.QRegExpValidator(regex,parent)
            editor.setValidator(validator)
            return editor
        else:
            return QtSql.QSqlRelationalDelegate.createEditor(self, parent, option, index)

    def setEditorData(self, editor, index):
        if index.column() == 1:
            text = index.model().data(index, QtCore.Qt.DisplayRole)
            editor.set(text)
        else:
            QtSql.QSqlRelationalDelegate.setEditorData(self, editor,index)

    def setModelData(self, editor, model, index):
        if index.column() == 1:
            model.setData(index, QVariant(editor.text()))
        else:
            QtSql.QSqlRelationalDelegate.setModelData(self, editor, model, index)
4

2 に答える 2

1

あなたが発見したようにsetText、検証は行いません。したがって、代わりにinsertを使用します。

    text = index.model().data(index, QtCore.Qt.DisplayRole)
    editor.clear()
    editor.insert(text)

もう 1 つのエラーは、単に をインポートしなかったために発生したものQVariantであり、使用できません。最も簡単な修正は、それを完全に省略することです (PyQt は、必要に応じて引数を自動的に a に変換しますQVariant)。

    model.setData(index, editor.text())

(注意: Python 3 を使用している場合、デフォルトでQVariantは常に、同等の Python 型との間で自動的に変換されます)。

于 2015-01-13T21:28:47.793 に答える