I am new tp PyQt5 and Python. I have designed an SQLite database as a Telephone directory. The fields are Abode, S_Name, F_Name Telephone_No and Email. I used and modified an existing python program. OK. so far, my program and database work well, but I would like to add the ability to search on S_Name and onother search on Telephone_No. I have been trying to make it work to the point of frustration. If anybody could help I would be grateful. Below is my program so far:
import os
import sys
from PyQt5 import QtGui
from PyQt5.QtGui import QColor, QPalette
from PyQt5.QtCore import QSize, Qt
from PyQt5.QtSql import QSqlDatabase, QSqlTableModel
from PyQt5.QtWidgets import (
QApplication,
QDataWidgetMapper,
QFormLayout,
QHBoxLayout,
QLabel,
QLineEdit,
QMainWindow,
QPushButton,
QVBoxLayout,
QWidget,
)
basedir = os.path.dirname(__file__)
db = QSqlDatabase("QSQLITE")
db.setDatabaseName(os.path.join("Phone_Book"))
db.open()
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Phone Book")
self.setWindowIcon(QtGui.QIcon('address-book-open.png'))
self.setStyleSheet("QMainWindow{background:'tan'}")
layout = QVBoxLayout()
form = QFormLayout()
self.Abode = QLineEdit()
self.Abode.setDisabled(True)
self.Abode.setStyleSheet("QLineEdit{background: 'white';\
color:'red'; font-style: 'italic';\
font-weight: 'bold';}")
self.S_Name = QLineEdit()
self.F_Name = QLineEdit()
self.Telephone_No = QLineEdit()
self.Email = QLineEdit()
form.addRow(QLabel("Abode"), self.Abode)
form.addRow(QLabel("SirName"), self.S_Name)
form.addRow(QLabel("First Names"), self.F_Name)
form.addRow(QLabel("Telephone Number"), self.Telephone_No)
form.addRow(QLabel("email Address"), self.Email)
self.model = QSqlTableModel(db=db)
self.mapper = QDataWidgetMapper()
self.mapper.setModel(self.model)
self.mapper.addMapping(self.Abode, 0)
self.mapper.addMapping(self.S_Name, 1)
self.mapper.addMapping(self.F_Name, 2)
self.mapper.addMapping(self.Telephone_No, 3)
self.mapper.addMapping(self.Email, 4)
self.model.setTable("Phones")
self.model.select()
self.mapper.toFirst()
# tag::controls[]
self.setMinimumSize(QSize(400, 250))
hcontrols = QHBoxLayout()
prev_rec = QPushButton("Previous")
prev_rec.clicked.connect(self.mapper.toPrevious)
next_rec = QPushButton("Next")
next_rec.clicked.connect(self.mapper.toNext)
save_rec = QPushButton("Save Changes")
save_rec.clicked.connect(self.mapper.submit)
hcontrols.addWidget(prev_rec)
hcontrols.addWidget(next_rec)
hcontrols.addWidget(save_rec)
layout.addLayout(form)
layout.addLayout(hcontrols)
vcontrols = QHBoxLayout()
sirName_Search = QPushButton("Search Sir Name")
sirName_Search.setStyleSheet(":hover{background: 'red'}");
sirName_Search.clicked.connect(self.Search_S_Name)
telephone_Search = QPushButton("Search Telephone No")
telephone_Search.setStyleSheet(":hover{background: 'red'}");
#telephone_Search.clicked.connect(self.Search_Telephone)
vcontrols.addWidget(sirName_Search)
vcontrols.addWidget(telephone_Search)
layout.addLayout(vcontrols)
widget = QWidget()
widget.setLayout(layout)
self.setCentralWidget(widget)
def Search_S_Name(self):
pass
def Search_Telephone(self):
pass
def update_filter(self, s):
filter_str = 'S_Name LIKE "%{}%"'.format(s)
self.model.setFilter(filter_str)
app = QApplication(sys.argv)
window = MainWindow()
app.setStyle("Fusion")
window.show()
app.exec_()