0

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() 
1
  • The example code is longish and still not complete. A minimal running example would be better. And have you thought about communication with signals and slots? Commented Jan 5, 2015 at 12:51

1 Answer 1

1

this is a established control:

self.tableview.connect(self.tableview,SIGNAL('clicked(QModelIndex)'), lambda x:self.mapper.setCurrentModelIndex(self.tableview.selectedIndexes()[0])) def connects(self): self.connect(self.controlButtons.topPushButton, SIGNAL("clicked()"),lambda:self.arrow('firstRecord')) self.connect(self.controlButtons.lastPushButton, SIGNAL("clicked()"),lambda:self.arrow('lastRecord')) self.connect(self.controlButtons.beforePushButton, SIGNAL("clicked()"),lambda:self.arrow('prevRecord')) self.connect(self.controlButtons.nextPushButton, SIGNAL("clicked()"),lambda:self.arrow('nextRecord')) self.connect(self.controlButtons.newPushButton, SIGNAL("clicked()"),self.newRecord) self.connect(self.controlButtons.modifyPushButton, SIGNAL("clicked()"),self.modifyRecord) self.connect(self.controlButtons.deletePushButton, SIGNAL("clicked()"),self.deleteRecord) self.connect(self.controlButtons.savePushButton, SIGNAL("clicked()"),self.saveRecord) self.connect(self.controlButtons.cancelPushButton, SIGNAL("clicked()"),self.cancelRecord) def arrow(self, arrow): if arrow=='firstRecord':self.mapper.toFirst() elif arrow=='lastRecord':self.mapper.toLast() elif arrow=='prevRecord':self.mapper.toPrevious() elif arrow=='nextRecord':self.mapper.toNext() self.tableSelectRow() def tableSelectRow(self): row = self.mapper.currentIndex() if self.tableview: self.tableview.selectRow(row) def newRecord(self): row = self.model.rowCount() self.model.insertRow(row) self.arrow('lastRecord') def modifyRecord(self):pass def deleteRecord(self): if (QMessageBox.question(None,"Delete","Really Delete?",QMessageBox.Yes, QMessageBox.No)==QMessageBox.No): return row = self.mapper.currentIndex() self.model.removeRow(row) self.model.submitAll() if row + 1 >= self.model.rowCount(): row-=1 self.mapper.setCurrentIndex(row) self.tableSelectRow() def saveRecord(self): row = self.mapper.currentIndex() self.mapper.submit() self.mapper.setCurrentIndex(row) self.tableSelectRow() def cancelRecord(self): self.mapper.revert() self.tableSelectRow() 
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.