Хотя лямбда-методы полезны для определенных типов задач, в общем, вы не должны злоупотреблять ими, потому что они имеют много ограничений, в вашем случае функция fetch должна возвращать результат, но в лямбда-методе это трудно установить (это может бытьв теории, но это было бы нечитабельно).
В дополнение к этому я потрудился улучшить ваш код, следуя рекомендациям PyQt: http://pyqt.sourceforge.net/Docs/PyQt5/designer.html#using-the-generated-code,, в нем я рекомендую не изменять класс, сгенерированныйQt Designer, но для реализации другого класса, который наследует от виджета и использует начальный класс для заполнения виджета, в этом новом классе реализована логика.
Код:
import sqlite3
from PyQt5 import QtCore, QtGui, QtWidgets
def fetch(nm):
store=sqlite3.connect("store.db")
book=store.cursor()
book.execute("select * from books where title='{}';".format(nm))
m=book.fetchone()
store.close()
if m:
print("the name is {} ".format(nm))
return m[2]
else:
print("Book is not Found")
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(635, 510)
self.find = QtWidgets.QPushButton(Form)
self.find.setGeometry(QtCore.QRect(370, 200, 93, 28))
self.find.setObjectName("find_button")
self.find.setToolTip("Press this")
self.name = QtWidgets.QLabel(Form)
self.name.setGeometry(QtCore.QRect(100, 200, 55, 16))
self.name.setObjectName("name_label")
self.price = QtWidgets.QLabel(Form)
self.price.setGeometry(QtCore.QRect(100, 260, 55, 16))
self.price.setObjectName("price_label")
self.rs = QtWidgets.QLineEdit(Form)
self.rs.setGeometry(QtCore.QRect(230, 260, 55, 16))
self.rs.setObjectName("rs_QLineEdit")
self.lineEdit = QtWidgets.QLineEdit(Form)
self.lineEdit.setGeometry(QtCore.QRect(220, 200, 113, 22))
self.lineEdit.setObjectName("lineEdit")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.find.setText(_translate("Form", "Find"))
self.name.setText(_translate("Form", "Name"))
self.price.setText(_translate("Form", "Price"))
self.rs.setText(_translate("Form", "RS."))
class Widget(QtWidgets.QWidget, Ui_Form):
def __init__(self, parent=None):
QtWidgets.QWidget.__init__(self, parent)
self.setupUi(self)
self.find.clicked.connect(self.onFindClicked)
reg_ex = QtCore.QRegExp("[0-9]+.?[0-9]{,2}")
input_validator = QtGui.QRegExpValidator(reg_ex, self.rs)
self.rs.setValidator(input_validator)
@QtCore.pyqtSlot()
def onFindClicked(self):
title = self.lineEdit.text()
name = fetch(title)
if name:
self.rs.setText(str(name))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())