Note: I've edited my question for better understanding.
I have a code works well. But there is something I do not understand exactly.
import sys
from PyQt5 import QtCore, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.setWindowTitle("TEST PROGRAM")
MainWindow.resize(1000, 700)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.tabWidget = QtWidgets.QTabWidget(MainWindow)
self.tabWidget.setGeometry(QtCore.QRect(20, 20, 1880, 950))
self.tabWidget.setAutoFillBackground(False)
self.tabWidget.setTabShape(QtWidgets.QTabWidget.Rounded)
self.tabWidget.setObjectName("tabWidget")
PreparePanel(self.tabWidget,"myPanel","TEST")
self.tabWidget.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
class PreparePanel():
def __init__(self,twg,panelName,panelbaslik):
self.myPanel = QtWidgets.QWidget()
self.myPanel.setObjectName(panelName)
twg.addTab(self.myPanel, panelbaslik)
self.LEdit = QtWidgets.QLineEdit(self.myPanel)
self.LEdit.setGeometry(QtCore.QRect(2, 95, 100, 22))
self.LEdit.setFrame(True)
self.LEdit.setObjectName("LEdit_0")
#---------------works fine------------------------------------------------------
#For the code to work, we need to use a dummy variable.
self.LEdit.textChanged.connect(lambda dummyvar: self.myFilterFunc(dummyvar))
def myFilterFunc(self,dummyVariable):
child = self.myPanel.findChild(QtWidgets.QLineEdit, "LEdit_0")
print(child.text())
#---------------works fine------------------------------------------------------
#--------------- does not work------------------------------------------------------
#When we replace the above section with this section, the code does not work.
#
# self.LEdit.textChanged.connect(self.myFilterFunc)
# def myFilterFunc(self):
# child = self.myPanel.findChild(QtWidgets.QLineEdit, "LEdit_0")
# print(child.text())
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
pencere = QtWidgets.QWidget()
AnaPencere = Ui_MainWindow()
AnaPencere.setupUi(pencere)
pencere.show()
sys.exit(app.exec_())
I do not use cond_text parameter in myFilterFunc(), but when I remove that parameter, code doesn't work and raise error like:
AttributeError: 'NoneType' object has no attribute 'text'
Why should I put a parameter that I never used?
Thanks in advance.
If we put the function at the beginning of init(), the lambda is not needed. Also if we remove PrepareClass and put the code inside PrepareClass into Class Ui_MainWindow(object), the code still works even though myFilterFunc() is outside the setupUi function. But I do not understand why?
Another working code.
import sys
from PyQt5 import QtCore, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.setWindowTitle("TEST")
MainWindow.resize(1000, 700)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.tabWidget = QtWidgets.QTabWidget(MainWindow)
self.tabWidget.setGeometry(QtCore.QRect(20, 20, 1880, 950))
self.tabWidget.setAutoFillBackground(False)
self.tabWidget.setTabShape(QtWidgets.QTabWidget.Rounded)
self.tabWidget.setObjectName("tabWidget")
self.LEdit = QtWidgets.QLineEdit(self.tabWidget)
self.LEdit.setGeometry(QtCore.QRect(100, 100, 150, 30))
self.LEdit.setFrame(True)
self.LEdit.setObjectName("LEdit_1")
self.LEdit.textChanged.connect(self.myFilterFunc)
self.tabWidget.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def myFilterFunc(self):
child = self.tabWidget.findChild(QtWidgets.QLineEdit, "LEdit_1")
print(child.text())
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
pencere = QtWidgets.QWidget()
AnaPencere = Ui_MainWindow()
AnaPencere.setupUi(pencere)
pencere.show()
sys.exit(app.exec_())