from PySide import QtGui, QtCore
import sys
class User():
def __init__(self, name, password):
self.name = name
self.password = password
class MyTableModel(QtCore.QAbstractTableModel):
def __init__(self, parent, rows, columns):
super().__init__(parent)
self.rows = rows
self.columns = columns
def columnCount(self, index):
return len(self.columns)
def rowCount(self, index):
return len(self.rows)
def data(self, index, role):
if index.isValid():
if (role == QtCore.Qt.DisplayRole) or (role == QtCore.Qt.EditRole):
attr_name = self.columns[index.column()]
row = self.rows[index.row()]
return getattr(row, attr_name)
def flags(self, index):
if not index.isValid():
return QtCore.Qt.ItemIsEnabled
else:
return QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEditable
def setData(self, index, value, role=QtCore.Qt.EditRole):
if index.isValid() and role == QtCore.Qt.EditRole:
attr_name = self.columns[index.column()]
row = self.rows[index.row()]
setattr(row, attr_name, value)
class MyWindow(QtGui.QWidget):
def __init__(self):
super(MyWindow, self).__init__()
self.setLayout(QtGui.QFormLayout(self))
self.user_edit = QtGui.QLineEdit(self)
self.password_edit = QtGui.QLineEdit(self)
self.mapper = QtGui.QDataWidgetMapper(self)
user1 = User('Mary', '12345')
user2 = User('John', 'qwerty')
rows = [user1, user2]
columns = ['name', 'password']
self.model = MyTableModel(self, rows, columns)
self.mapper.setModel(self.model)
self.mapper.addMapping(self.user_edit, 0)
self.mapper.addMapping(self.password_edit, 1)
self.mapper.toFirst()
self.layout().addRow("User name:", self.user_edit)
self.layout().addRow("Password:", self.password_edit)
self.btnPrevious = QtGui.QPushButton("Previous", self)
self.btnNext = QtGui.QPushButton("Next",self)
self.layout().addWidget(self.btnPrevious)
self.layout().addWidget(self.btnNext)
self.btnPrevious.clicked.connect(self.mapper.toPrevious)
self.btnNext.clicked.connect(self.mapper.toNext)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
win = MyWindow()
win.show()
app.exec_()