2016-01-20 3 views
0

Второй addMapping() не может работать.Второй addMapping() не может работать с использованием QDataWidgetMapper

Второй QLineEdit не может получить данные. как выставка изображения:

enter image description here

Это весь код:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

from PyQt5.QtWidgets import (QWidget, QLabel, QDataWidgetMapper, 
           QLineEdit, QApplication, QGridLayout) 
from PyQt5.QtCore import QAbstractListModel, Qt 

from PyQt5.QtWidgets import QListView 


class Window(QWidget): 
    def __init__(self, parent=None): 
     super(Window, self).__init__(parent) 

     # Set up the widgets. 
     self.nameEdit = QLineEdit() 
     self.nameEdit2 = QLineEdit() 

     layout = QGridLayout() 
     layout.addWidget(self.nameEdit, 0, 1, 1, 1) 
     layout.addWidget(self.nameEdit2, 0, 2, 1, 1) 

     self.setLayout(layout) 

    def setModel(self, model): 
     # Set up the mapper. 
     self.mapper = QDataWidgetMapper(self) 
     self.mapper.setModel(model) 
     self.mapper.addMapping(self.nameEdit, 0) 
     self.mapper.addMapping(self.nameEdit2, 1) 
     self.mapper.toFirst() 


class MyModel(QAbstractListModel): 
    def __init__(self, data=[], parent=None): 
     # super().__init__(parent) 
     super(MyModel, self).__init__(parent) 

     self.__data = data 

    def rowCount(self, index_parent=None, *args, **kwargs): 
     return len(self.__data) 

    def data(self, index, role=Qt.DisplayRole, parent=None): 

     if not index.isValid(): 
      return None 

     if index.row() > len(self.__data): 
      return None 

     if role == Qt.DisplayRole or role == Qt.EditRole: 
      return self.__data[index.row()][index.column()] 

     return None 

    def flags(self, index): 
     flags = super(MyModel, self).flags(index) 

     if index.isValid(): 
      flags |= Qt.ItemIsEditable 
      flags |= Qt.ItemIsDragEnabled 
     else: 
      flags = Qt.ItemIsDropEnabled 

     return flags 

    def setData(self, index, value, role=Qt.EditRole): 

     if not index.isValid() or role != Qt.EditRole: 
      return False 

     self.__data[index.row()][index.column()] = value 
     self.dataChanged.emit(index, index) 
     return True 


if __name__ == '__main__': 
    import sys 

    app = QApplication(sys.argv) 

    myModel = MyModel([['line 1', 'line1 col2'], 
         ['line 2', 'line2 col2'], 
         ['line 3', 'line3 col2'], 
         ['line 4', 'line4 col2']]) 

    mywindow = Window() 
    mywindow.setModel(myModel) 

    qlistview2 = QListView() 
    qlistview2.setModel(myModel) 

    mywindow.show() 
    qlistview2.show() 

    sys.exit(app.exec_()) 

ответ

0

Я нашел проблему. Сам вопрос решить мою проблему:

QDataWidgetMapper: wrong mapping

Я использовал неправильный родительскую модель QAbstractListModel. QAbstractTableModel идеально подходит для моего применения. Возможно, я также могу изменить ориентацию QAbstractListModel, но я не знаю, как это сделать.

The final code

Смежные вопросы