2017-10-31 6 views
0

列番号1のスピンボックスを含むTreeViewでデリゲートとモデルを実装しましたが、数値形式が正しくありません。しかし、スピンボックスをクリックすると、正しく設定されます。私はPyQt5を使用しています。Qt、Spinboxの値がTreeViewの最初に正しく設定されない

ここで私はそれをはるかに良く説明する2つの画像を添付しました。

値が正しく後

ここ

は、スピンボックスは、最初の時間に初期化されたコードであるスピンボックスをクリックし、値が見られ

初めてでsetted:

def createEditor(self, parent, option, index): 
    item = index.internalPointer() 
    if index.column() == 0: 
     editor = super().createEditor(parent, option, index) 
    elif index.column() == 1: 
     name = item.get_data()[0] 
     data = item.get_data()[1] 
     editor = QtWidgets.QSpinBox(parent, minimum=-9999999999, maximum=9999999999) 
     # editor.setEditTriggers(QAbstractItemView.SelectedClicked) 
     editor.setObjectName(name) 
     editor.setValue(data) 
     editor.setStyleSheet(""" 
      border-radius: 0px; 
     """) 
     editor.installEventFilter(self) 
    else: 
     editor = super().createEditor(parent, option, index) 

    return editor 

私はどこかでcomitDataを見逃してしまったと思うが、どこでそれを発行するのが良いかわかりません。もし、

マルセル

+0

はない画像として、テキストとしてあなたのコードを入れてください。 – eyllanesc

+0

コードが添付されました。ごめんなさい。 – WaRc3L

+0

[最小限の完全で検証可能な例](https://stackoverflow.com/help/mcve)を提供する必要があります。 – eyllanesc

答えて

0

おかげで問題が解決されました。

これはデリゲートではなく、QSpinBoxではなく、モデルとstrの形式です。関数データ上QtCore.Qt.DisplayRoleの役割に

私は、次のコードに表示として、私は、正しい変換をした:

def data(self, in_index, role): 
    if not in_index.isValid(): 
     return QVariant() 
    node = in_index.internalPointer() 
    if role == QtCore.Qt.DisplayRole: 
     if node.data(in_index.column()) is None: 
      return '' 
     if in_index.column() == 1: 
      return str(float(node.data(in_index.column()))) 
     return str(node.data(in_index.column())) 

おかげであなたのすべてを。

よろしく、

マルセル

関連する問題