2017-02-13 50 views
1

我嘗試使用QDataWidgetMapper將QtGui.QPlainTextEdit連接到模型。 我沒有得到任何錯誤,只是在TextEdit中沒有。 我沒有得到它,我找不到好的示例代碼。PySide PyQt QDataWidgetMapper

這是一些ExampleCode。 我真的很希望有人能幫助我。

from PySide import QtCore, QtGui 
import sys 


class ComponentsListModel(QtCore.QAbstractListModel): 
    def __init__(self, components=[], parent = None): 
     super(ComponentsListModel, self).__init__(parent=None) 
     self.components = components 
     self.list = parent 

    def rowCount(self, parent): 
     return len(self.components) 

    def data(self, index, role): 
     row = index.row() 

     if role == QtCore.Qt.DisplayRole:#index.isValid() and 
      value = self.components[row] 
      return value 



class MainWindow(QtGui.QWidget): 
    def __init__(self): 
     super(MainWindow, self).__init__() 
     self._build_ui() 

    def _build_ui(self): 
     self.layout = QtGui.QVBoxLayout() 

     self.listView = QtGui.QListView() 
     self.model = ComponentsListModel(components = ['1', '2', '3']) 
     self.listView.setModel(self.model) 
     self.text = QtGui.QPlainTextEdit() 
     self.layout.addWidget(self.listView) 
     self.layout.addWidget(self.text) 
     self.setLayout(self.layout) 

     self._mapper = QtGui.QDataWidgetMapper(self) 
     self._mapper.setModel(self.model) 
     self._mapper.setSubmitPolicy(QtGui.QDataWidgetMapper.AutoSubmit) 
     self._mapper.addMapping(self.text, 0) 
     self._mapper.toFirst() 


if __name__ == "__main__": 
    app = QtGui.QApplication(sys.argv) 
    app.setStyle('Plastique') 
    mySW = MainWindow() 
    mySW.show() 
    sys.exit(app.exec_()) 
+0

,嘗試,如果角色加'== Qt的.EditRole:return self.components [row]' – SyedElec

+0

作品像魅力,謝謝 –

+0

我很高興它幫助,我做出了答案。 – SyedElec

回答

2

您需要在您的數據功能在你的``中的類ComponentsListModel`功能data`添加條件Qt.EditRoleComponentsListModel

if role == Qt.EditRole: 
     value = self.components[row] 
     return value