| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- import os
- from PyQt5.QtCore import QSize
- from PyQt5.QtSql import QSqlDatabase, QSqlQueryModel, QSqlQuery
- from PyQt5.QtWidgets import (QApplication, QMainWindow, QTableView, QWidget,
- QHBoxLayout, QVBoxLayout, QLineEdit)
- basedir = os.path.dirname(__file__)
- class MainWindow(QMainWindow):
- def __init__(self):
- super().__init__()
- container = QWidget()
- layout_search = QHBoxLayout()
- self.track = QLineEdit()
- self.track.setPlaceholderText("Track name...")
- self.track.textChanged.connect(self.update_query)
- self.composer = QLineEdit()
- self.composer.setPlaceholderText("Artist name...")
- self.composer.textChanged.connect(self.update_query)
- self.album = QLineEdit()
- self.album.setPlaceholderText("Album name...")
- self.album.textChanged.connect(self.update_query)
- layout_search.addWidget(self.track)
- layout_search.addWidget(self.composer)
- layout_search.addWidget(self.album)
- layout_view = QVBoxLayout()
- layout_view.addLayout(layout_search)
- self.table = QTableView()
- layout_view.addWidget(self.table)
- container.setLayout(layout_view)
- self.model = QSqlQueryModel()
- self.table.setModel(self.model)
- self.db = QSqlDatabase("QSQLITE")
- self.db.setDatabaseName(os.path.join(basedir, "Chinook_Sqlite.sqlite"))
- self.db.open()
- self.query = QSqlQuery(self.db)
- self.query.prepare(
- "select Name, composer, Album.Title from Track "
- "inner join Album on Track.AlbumId = Album.AlbumId where "
- "Track.Name like '%' || :track_name || '%' and "
- "Track.composer like '%' || :composer_name || '%' and "
- "Album.Title like '%' || :album_title || '%' ")
- self.update_query()
- self.setMinimumSize(QSize(1024, 600))
- self.setCentralWidget(container)
- def update_query(self, s=None):
- track_name = self.track.text()
- track_composer = self.composer.text()
- album_title = self.album.text()
- self.query.bindValue(":track_name", track_name)
- self.query.bindValue(":composer_name", track_composer)
- self.query.bindValue(":album_title", album_title)
- self.query.exec_()
- self.model.setQuery(self.query)
- if __name__ == "__main__":
- import sys
- app = QApplication(sys.argv)
- window = MainWindow()
- window.show()
- sys.exit(app.exec_())
|