I am trying to allow my users to choose which database to open. Each database will have the same schema. For some reason, although I can't get my QTableView to populate after I open the database.
I am retelling the example code, but this should give you an idea of what I'm trying to do.
work:
class aMainWindow(QMainWindow, Ui_MainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.db = QSqlDatabase.addDatabase("QSQLITE")
self.db.setDatabaseName('testdb.db')
self.db.open()
self.setupUi(self)
self.model = QSqlTableModel(self)
self.model.setTable("records")
self.model.setSort(FILEORDER, Qt.AscendingOrder)
self.model.setHeaderData(ID, Qt.Horizontal, QVariant("ID"))
self.model.setHeaderData(FILEORDER, Qt.Horizontal, QVariant("File Order"))
self.model.setHeaderData(RECORDTYPE, Qt.Horizontal, QVariant("Type"))
self.model.setHeaderData(NAME, Qt.Horizontal, QVariant("Name"))
self.model.setHeaderData(PRESORTNAME, Qt.Horizontal, QVariant("Presort Name"))
self.model.setHeaderData(RECORD, Qt.Horizontal, QVariant("Record"))
self.model.select()
self.tableView.setModel(self.model)
self.tableView.setColumnHidden(ID, True)
self.tableView.setColumnHidden(PRESORTNAME, True)
self.tableView.setColumnHidden(RECORD, True)
does not work:
class aMainWindow(QMainWindow, Ui_MainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.setupUi(self)
self.model = QSqlTableModel(self)
self.model.setTable("records")
self.model.setSort(FILEORDER, Qt.AscendingOrder)
self.model.setHeaderData(ID, Qt.Horizontal, QVariant("ID"))
self.model.setHeaderData(FILEORDER, Qt.Horizontal, QVariant("File Order"))
self.model.setHeaderData(RECORDTYPE, Qt.Horizontal, QVariant("Type"))
self.model.setHeaderData(NAME, Qt.Horizontal, QVariant("Name"))
self.model.setHeaderData(PRESORTNAME, Qt.Horizontal, QVariant("Presort Name"))
self.model.setHeaderData(RECORD, Qt.Horizontal, QVariant("Record"))
self.model.select()
self.tableView.setModel(self.model)
self.tableView.setColumnHidden(ID, True)
self.tableView.setColumnHidden(PRESORTNAME, True)
self.tableView.setColumnHidden(RECORD, True)
def on_actionOpen_DB_triggered(self, checked=None):
if checked is None: return
filename = QFileDialog.getOpenFileName(self, 'open a database',
'/home/',
"Databases (*.db)",
"Databases (*.db)")
if not filename:
pass
self.db = QSqlDatabase.addDatabase("QSQLITE")
if self.db.isOpen():
sys.stdout.write('db still open?')
self.db.setDatabaseName(filename)
self.dbname = filename
self.db.open()
self.model.select()
if self.db.isOpen():
sys.stdout.write('db opened')