tableview_querymodel_parameter.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import os
  2. from PyQt5.QtCore import QSize
  3. from PyQt5.QtSql import QSqlDatabase, QSqlQueryModel, QSqlQuery
  4. from PyQt5.QtWidgets import (QApplication, QMainWindow, QTableView, QWidget,
  5. QHBoxLayout, QVBoxLayout, QLineEdit)
  6. basedir = os.path.dirname(__file__)
  7. class MainWindow(QMainWindow):
  8. def __init__(self):
  9. super().__init__()
  10. container = QWidget()
  11. layout_search = QHBoxLayout()
  12. self.track = QLineEdit()
  13. self.track.setPlaceholderText("Track name...")
  14. self.track.textChanged.connect(self.update_query)
  15. self.composer = QLineEdit()
  16. self.composer.setPlaceholderText("Artist name...")
  17. self.composer.textChanged.connect(self.update_query)
  18. self.album = QLineEdit()
  19. self.album.setPlaceholderText("Album name...")
  20. self.album.textChanged.connect(self.update_query)
  21. layout_search.addWidget(self.track)
  22. layout_search.addWidget(self.composer)
  23. layout_search.addWidget(self.album)
  24. layout_view = QVBoxLayout()
  25. layout_view.addLayout(layout_search)
  26. self.table = QTableView()
  27. layout_view.addWidget(self.table)
  28. container.setLayout(layout_view)
  29. self.model = QSqlQueryModel()
  30. self.table.setModel(self.model)
  31. self.db = QSqlDatabase("QSQLITE")
  32. self.db.setDatabaseName(os.path.join(basedir, "Chinook_Sqlite.sqlite"))
  33. self.db.open()
  34. self.query = QSqlQuery(self.db)
  35. self.query.prepare(
  36. "select Name, composer, Album.Title from Track "
  37. "inner join Album on Track.AlbumId = Album.AlbumId where "
  38. "Track.Name like '%' || :track_name || '%' and "
  39. "Track.composer like '%' || :composer_name || '%' and "
  40. "Album.Title like '%' || :album_title || '%' ")
  41. self.update_query()
  42. self.setMinimumSize(QSize(1024, 600))
  43. self.setCentralWidget(container)
  44. def update_query(self, s=None):
  45. track_name = self.track.text()
  46. track_composer = self.composer.text()
  47. album_title = self.album.text()
  48. self.query.bindValue(":track_name", track_name)
  49. self.query.bindValue(":composer_name", track_composer)
  50. self.query.bindValue(":album_title", album_title)
  51. self.query.exec_()
  52. self.model.setQuery(self.query)
  53. if __name__ == "__main__":
  54. import sys
  55. app = QApplication(sys.argv)
  56. window = MainWindow()
  57. window.show()
  58. sys.exit(app.exec_())