python - Update tableView in two different classes with same model -


i have 2 different classes , want share same model/database. if make new record model/database tableviews in different classes should update. tableview in same class insert updated. please need help. thanks.

my code:

import sys pyside import qtcore, qtgui, qtsql  model import model  class mainwindow(qtgui.qmainwindow):     def __init__(self, parent=none):         qtgui.qmainwindow.__init__(self, parent)         self.initui()          self.createnewdatabase()          self.openeditor()      def initui(self):         self.tableview = qtgui.qtableview(self)         self.tableview.resize(self.tableview.sizehint())         button = qtgui.qpushbutton('make entry', self)         button.clicked.connect(self.insertentry)          self.setgeometry(400, 400, 300, 300)         self.show()      def createconnection(self, databasepath):         # create qsqlite database         self.database = qtsql.qsqldatabase.adddatabase("qsqlite")         # set path of database         self.database.setdatabasename(databasepath)          self.database.open()      def initializemodel(self):         self.model = model()         self.model.settable("friends")         self.model.select()      def createnewdatabase(self):          databasepath = qtgui.qfiledialog.getsavefilename(self, 'save database...', '')[0]         self.createconnection(databasepath)         self.createrelationaltables()         self.initializemodel()          # set model mainwindow table view         self.tableview.setmodel(self.model)      def createrelationaltables(self):          sqlquery = qtsql.qsqlquery()         sqlquery.exec_(                 '''                 create table friends(                     id integer primary key not null,                     name text not null,                     name2 text not null)                 '''         )      def insertentry(self):         # number of rows of database         row = self.model.rowcount()         # create empty record         record = qtsql.qsqlrecord()         # insert record         self.model.insertrecord(-1, record)      def openeditor(self):         # create instance of editor         self.editor = editor()         # show editor         self.editor.show()  class editor(qtgui.qwidget):     def __init__(self, parent=none):          qtgui.qwidget.__init__(self)          self.initui()          # set model table view of editor         self.model = model()         self.model.settable("friends")         self.model.select()         self.tableview.setmodel(self.model)      def initui(self):         self.tableview = qtgui.qtableview(self)         self.tableview.resize(self.tableview.sizehint())          self.setgeometry(400, 400, 300, 300)         self.show()  def main():      app = qtgui.qapplication(sys.argv)     ex = mainwindow()     sys.exit(app.exec_())  if __name__ == '__main__':     main() 

the model:

from pyside.qtsql import * pyside.qtcore import *  class model(qsqlrelationaltablemodel):     def __init__(self):         super(model, self).__init__()      def setdata(self, index, value, role = qt.editrole):          if role == qt.editrole:             self._items[index.row()] = str(value.tostring().toutf8())             qobject.emit(self, signal("datachanged(const qmodelindex&, const qmodelindex &)"), index, index)             return true         return false 

you creating 2 models, once in mainwindow, , once in editor. have 2 instance of class model, updating one.

what want create model once, , use in multiple views. first model , editor both instantiated in mainwindow, need pass model when initializing editor:

def openeditor(self):       self.editor = editor(self.model)       self.editor.show()  class editor(qtgui.qwidget):     def __init__(self, model, parent=none):         qtgui.qwidget.__init__(self)         self.tableview = qtgui.qtableview(self)         self.tableview.setmodel(model) 

Comments