tableview_relationalmodel.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import os
  2. from PyQt5.QtCore import QSize
  3. from PyQt5.QtSql import QSqlDatabase, QSqlRelationalTableModel, QSqlRelation, QSqlRelationalDelegate
  4. from PyQt5.QtWidgets import QApplication, QMainWindow, QTableView
  5. basedir = os.path.dirname(__file__)
  6. class MainWindow(QMainWindow):
  7. def __init__(self):
  8. super().__init__()
  9. self.table = QTableView()
  10. self.db = QSqlDatabase("QSQLITE")
  11. self.db.setDatabaseName(os.path.join(basedir, "Chinook_Sqlite.sqlite"))
  12. self.db.open()
  13. self.model = QSqlRelationalTableModel(db=self.db)
  14. self.model.setTable("Track")
  15. self.model.setRelation(2, QSqlRelation("Album", "AlbumId", "Title"))
  16. self.model.setRelation(
  17. 3, QSqlRelation("MediaType", "MediaTypeId", "Name"))
  18. self.model.setRelation(4, QSqlRelation("Genre", "GenreId", "Name"))
  19. delegate = QSqlRelationalDelegate(self.table)
  20. self.table.setItemDelegate(delegate)
  21. self.model.select()
  22. self.table.setModel(self.model)
  23. self.setMinimumSize(QSize(1024, 600))
  24. self.setCentralWidget(self.table)
  25. if __name__ == "__main__":
  26. import sys
  27. app = QApplication(sys.argv)
  28. window = MainWindow()
  29. window.show()
  30. sys.exit(app.exec_())