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
Post a Comment