import os from PyQt5.QtCore import QSize from PyQt5.QtSql import QSqlDatabase, QSqlRelationalTableModel, QSqlRelation, QSqlRelationalDelegate from PyQt5.QtWidgets import QApplication, QMainWindow, QTableView basedir = os.path.dirname(__file__) class MainWindow(QMainWindow): def __init__(self): super().__init__() self.table = QTableView() self.db = QSqlDatabase("QSQLITE") self.db.setDatabaseName(os.path.join(basedir, "Chinook_Sqlite.sqlite")) self.db.open() self.model = QSqlRelationalTableModel(db=self.db) self.model.setTable("Track") self.model.setRelation(2, QSqlRelation("Album", "AlbumId", "Title")) self.model.setRelation( 3, QSqlRelation("MediaType", "MediaTypeId", "Name")) self.model.setRelation(4, QSqlRelation("Genre", "GenreId", "Name")) delegate = QSqlRelationalDelegate(self.table) self.table.setItemDelegate(delegate) self.model.select() self.table.setModel(self.model) self.setMinimumSize(QSize(1024, 600)) self.setCentralWidget(self.table) if __name__ == "__main__": import sys app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec_())