I have a Qsqltable in tableview in a class (KL_browse) The QsqlTable has a selectionbar and to edit the selected record i call a form in another class (Test_win)
How can i pass the selected record in the Tableview to the mapper in the form ???
See code example (test & play code !)
class Test_win(QDialog,ui_test_win.Ui_test_win):
def init(self, state, index): super(Test_win, self).init() self.setupUi(self) self.state = state self.index = index
# Make some local modifications on the generated ui
self.naam_edt.setAlignment(Qt.AlignRight)
# Set model
self.model = QSqlTableModel(self) self.model.setTable("KLANTEN") self.model.select() # Set mappings fields to view self.mapper = QDataWidgetMapper(self) self.mapper.setSubmitPolicy(QDataWidgetMapper.ManualSubmit) self.mapper.setModel(self.model)
self.mapper.addMapping(self.klnr_edt, 0) self.mapper.addMapping(self.naam_edt, 1) self.mapper.addMapping(self.straat_edt, 2) self.mapper.addMapping(self.huisnr_edt, 3) self.mapper.addMapping(self.gemeente_edt, 4) # connections & slots
self.ok_button.clicked.connect(self.save_Record) self.pushButton.clicked.connect(self.prev_Record) # set in Add mode
if state == 0: query = QSqlQuery("""SELECT MAX(KLANTNR) as KLANTNR FROM KLANTEN""") query.next() if query.isValid(): Hklantnr = query.value(0)
else: return None
self.klnr_edt.setText(str(Hklantnr + 1)) row = self.model.rowCount() self.model.insertRow(row) self.mapper.setCurrentIndex(row) self.naam_edt.setFocus() # set in Edit mode query = QSqlQuery("""SELECT * FROM KLANTEN WHERE KLANTNR = self.index """) query.next()
self.naam_edt.setFocus() def prev_Record(self): self.mapper.toNext()
def save_Record(self):
self.mapper.submit() QDialog.done(self, True) # Voor beeld van browse door klantenbestand
class KL_browse(QDialog, ui_kl_browse.Ui_kl_browse):
def __init__(self): super(KL_browse, self).__init__() # query = QSqlQuery() # query.exec_("""SELECT * FROM klanten ORDER BY klantnaam""") self.setupUi(self) self.model = QSqlTableModel(self) self.model.setTable("KLANTEN") self.model.select() self.tableView.setModel(self.model) self.tableView.setSelectionMode(QTableView.SingleSelection) self.tableView.setSelectionBehavior(QTableView.SelectRows) # self.view.setColumnHidden(ID, True) # index = self.tableView.model().index(0, 1) # self.tableView.selectionModel().setCurrentIndex(index, QItemSelectionModel.NoUpdate) self.tableView.horizontalHeader().setSectionsMovable(True) self.tableView.horizontalHeader().setDragEnabled(True) self.tableView.horizontalHeader().setDragDropMode(QAbstractItemView.InternalMove) self.tableView.horizontalHeader().setSortIndicator(1,0) self.tableView.selectRow(0) self.tableView.selectColumn(1) index = self.tableView.model().index(0, 1) self.tableView.setCurrentIndex(index) # Volgende code is om de actie op knoppen en dergelijke op te vangen self.add_button.clicked.connect(self.add_record) self.Del_button.clicked.connect(self.del_record) self.ed_button.clicked.connect(self.edt_record)
def del_record(self): index = self.tableView.currentIndex() self.model.removeRow(index.row()) self.model.submitAll() self.model.select() index = self.tableView.model().index(0, 1) self.tableView.setCurrentIndex(index) def add_record(self): self.test_win = Test_win(0) # 0 = add mode self.test_win.exec_() self.model.select() index = self.tableView.model().index(0, 1) self.tableView.setCurrentIndex(index) def edt_record(self): index = self.tableView.currentIndex() self.test_win = Test_win(1, index) # 1 = Edit mode self.test_win.exec_() # self.model.select() # self.tableView.activateWindow()