У меня есть два разных класса и вы хотите использовать одну и ту же модель/базу данных. Поэтому, если я создаю новую запись для модели/базы данных, tableViews в разных классах должны обновляться. Теперь обновляется только таблицаView в том же классе, что и вставка. Пожалуйста, мне нужна твоя помощь. Благодарю.Обновить таблицуView в двух разных классах с одинаковой моделью
Мой код:
import sys
from PySide import QtCore, QtGui, QtSql
from 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 a QSQLite database
self.database = QtSql.QSqlDatabase.addDatabase("QSQLITE")
# Set path of the 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 the model for 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):
# Get number of rows of database
row = self.model.rowCount()
# Create an empty record
record = QtSql.QSqlRecord()
# Insert record
self.model.insertRecord(-1, record)
def openEditor(self):
# Create an instance of Editor
self.editor = Editor()
# Show the editor
self.editor.show()
class Editor(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self)
self.initUI()
# Set the model for the 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()
Модель:
from PySide.QtSql import *
from 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