Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>You could use <a href="http://doc-snapshot.qt-project.org/4.8/qdatawidgetmapper.html" rel="nofollow"><code>QtGui.QDataWidgetMapper</code></a>. See how this example works:</p> <pre><code>#!/usr/bin/env python #-*- coding:utf-8 -*- #--------- # IMPORT #--------- import sys import sip sip.setapi('QString', 2) sip.setapi('QVariant', 2) from PyQt4 import QtGui, QtCore #--------- # DEFINE #--------- class MyItemDelegate(QtGui.QItemDelegate): def __init__(self, parent=None): super(MyItemDelegate, self).__init__(parent) def setEditorData(self, editor, index): if type(editor) == QtGui.QCheckBox: checkState = int(index.data()) editor.setChecked(checkState) return return super(MyItemDelegate, self).setEditorData(editor, index) def setModelData(self, editor, model, index): if type(editor) == QtGui.QCheckBox: checkState = editor.isChecked() model.setData(index, str(int(checkState))) return return super(MyItemDelegate, self).setModelData(editor, model, index) class MyWindow(QtGui.QWidget): def __init__(self, parent=None): super(MyWindow, self).__init__(parent) self.labelRecord = QtGui.QLabel(self) self.pushButtonNext = QtGui.QPushButton(self) self.pushButtonNext.setText("Next!") self.pushButtonNext.clicked.connect(self.on_pushButtonNext_clicked) self.pushButtonPrevious = QtGui.QPushButton(self) self.pushButtonPrevious.setText("Previous!") self.pushButtonPrevious.clicked.connect(self.on_pushButtonPrevious_clicked) self.spacerItem = QtGui.QSpacerItem( 40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum ) self.layoutHorizontal = QtGui.QHBoxLayout() self.layoutHorizontal.addItem(self.spacerItem) self.layoutHorizontal.addWidget(self.pushButtonPrevious) self.layoutHorizontal.addWidget(self.pushButtonNext) self.labelProperty = QtGui.QLabel(self) self.labelProperty.setText("Property") self.labelType = QtGui.QLabel(self) self.labelType.setText("Type") self.checkBoxBool = QtGui.QCheckBox(self) self.checkBoxBool.setText("Bool") self.lineEditProperty = QtGui.QLineEdit(self) self.lineEditType = QtGui.QLineEdit(self) self.standardItemModel = QtGui.QStandardItemModel(self) self.itemDelegate = MyItemDelegate(self) for rowNumber in range(3): items = [] for columnNumber in range(3): itemData = "row: {0} column {1}".format( rowNumber, columnNumber ) item = QtGui.QStandardItem( itemData if columnNumber != 2 else str(rowNumber - rowNumber/2*2) ) items.append(item) self.standardItemModel.appendRow(items) self.tableView = QtGui.QTableView(self) self.tableView.setModel(self.standardItemModel) self.dataWidgetMapper = QtGui.QDataWidgetMapper(self) self.dataWidgetMapper.setModel(self.standardItemModel) self.dataWidgetMapper.addMapping(self.lineEditProperty, 0) self.dataWidgetMapper.addMapping(self.lineEditType, 1) self.dataWidgetMapper.addMapping(self.checkBoxBool, 2) self.dataWidgetMapper.setItemDelegate(self.itemDelegate) self.dataWidgetMapper.currentIndexChanged.connect(self.on_dataWidgetMapper_currentIndexChanged) self.dataWidgetMapper.toFirst() self.layoutGrid = QtGui.QGridLayout(self) self.layoutGrid.addWidget(self.tableView, 0, 0, 1, 2) self.layoutGrid.addWidget(self.labelRecord, 1, 0, 1, 2) self.layoutGrid.addWidget(self.labelProperty, 2, 0, 1, 1) self.layoutGrid.addWidget(self.lineEditProperty, 2, 1, 1, 1) self.layoutGrid.addWidget(self.labelType, 3, 0, 1, 1) self.layoutGrid.addWidget(self.lineEditType, 3, 1, 1, 1) self.layoutGrid.addWidget(self.checkBoxBool, 4, 1, 1, 1) self.layoutGrid.addLayout(self.layoutHorizontal, 5, 0, 1, 2) @QtCore.pyqtSlot(int) def on_dataWidgetMapper_currentIndexChanged(self, index): self.labelRecord.setText("&lt;b&gt;Record {0}&lt;/b&gt;".format(index)) self.pushButtonPrevious.setDisabled(index == 0) self.pushButtonNext.setDisabled(index == self.standardItemModel.rowCount() - 1) @QtCore.pyqtSlot() def on_pushButtonNext_clicked(self): self.dataWidgetMapper.toNext() @QtCore.pyqtSlot() def on_pushButtonPrevious_clicked(self): self.dataWidgetMapper.toPrevious() #--------- # MAIN #--------- if __name__ == "__main__": app = QtGui.QApplication(sys.argv) app.setApplicationName('MyWindow') main = MyWindow() main.setGeometry(0, 0, 333, 333) main.show() sys.exit(app.exec_()) </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload