首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我要使用python pyqt5中从未在func中使用的参数?

为什么我要使用python pyqt5中从未在func中使用的参数?
EN

Stack Overflow用户
提问于 2022-08-08 11:29:05
回答 2查看 67关注 0票数 0

注:为了更好的理解,我编辑了我的问题。

我有个密码很好用。但有一件事我不太明白。

代码语言:javascript
复制
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函数之外,代码仍然工作。但我不明白为什么?

另一个有用的密码。

代码语言:javascript
复制
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_())
EN

回答 2

Stack Overflow用户

发布于 2022-08-08 11:33:49

首先,当你调用这个函数时,你传递的是文本。现在我并不真正理解您的代码所做的事情,因为您没有包含太多内容,但是我认为从调用中的参数中提取文本可以解决您的问题。

票数 0
EN

Stack Overflow用户

发布于 2022-08-08 21:43:33

在这里,ontextchange信号无法与myfilterfunc()建立连接。因此,一个可能的解决方法是在init()中添加所有函数,并使用lambda函数向它们发送信号。

代码语言:javascript
复制
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_())
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73277165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档