注:为了更好的理解,我编辑了我的问题。
我有个密码很好用。但有一件事我不太明白。
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_())我在myFilterFunc()中不使用myFilterFunc参数,但是当删除该参数时,代码无法工作并引发错误,如下所示:
AttributeError:'NoneType‘对象没有属性'text’
为什么我要放一个我从未使用过的参数?
提前谢谢。
如果将函数放在init()的开头,就不需要lambda。另外,如果我们移除PrepareClass并将PrepareClass中的代码放入Ui_MainWindow(object)类中,即使myFilterFunc()在setupUi函数之外,代码仍然工作。但我不明白为什么?
另一个有用的密码。
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_())发布于 2022-08-08 11:33:49
首先,当你调用这个函数时,你传递的是文本。现在我并不真正理解您的代码所做的事情,因为您没有包含太多内容,但是我认为从调用中的参数中提取文本可以解决您的问题。
发布于 2022-08-08 21:43:33
在这里,ontextchange信号无法与myfilterfunc()建立连接。因此,一个可能的解决方法是在init()中添加所有函数,并使用lambda函数向它们发送信号。
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------------------------------------------------------
self.LEdit.textChanged.connect(lambda: myFilterFunc())
def myFilterFunc():
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_())https://stackoverflow.com/questions/73277165
复制相似问题