Python 第二次实例化类时出错

Python 第二次实例化类时出错,python,python-3.x,pyqt,pyqt5,python-3.5,Python,Python 3.x,Pyqt,Pyqt5,Python 3.5,我是python和PyQt新手,当时正在开发我的第一个应用程序,在尝试再次实例化我创建的类时遇到了一个问题。我有以下错误: Traceback (most recent call last): File "ConfiguradorAnx.py", line 16, in <lambda> self.ProductInfo.clicked.connect(lambda: self.newWindow(InfoProduct)) TypeError: 'InfoProduc

我是python和PyQt新手,当时正在开发我的第一个应用程序,在尝试再次实例化我创建的类时遇到了一个问题。我有以下错误:

Traceback (most recent call last):
  File "ConfiguradorAnx.py", line 16, in <lambda>
     self.ProductInfo.clicked.connect(lambda: self.newWindow(InfoProduct))
TypeError: 'InfoProduct' object is not callable
Aborted
我第一次单击self.ProductInfo按钮时,它会工作,InfoProduct窗口会打开,但当我关闭窗口并再次单击同一按钮时,出现了错误。我不知道我错过了什么,希望你们能帮我


干杯

您正在执行时覆盖
newWindow
函数:

def newWindow(self, _class):
    self.newWindow = _class()
这样做的结果是,下次单击按钮时,lambda将尝试调用
self.newWindow(InfoProduct)
,但此时
self.newWindow
InfoProduct
的一个实例,显然无法调用

解决方案很简单(而且非常重要),对函数和指向实例的变量使用不同的名称:

        self.ProductInfo.clicked.connect(lambda: self.createNewWindow(InfoProduct))

    def createNewWindow(self, _class):
        self.newWindow = _class()
两个小旁注:

  • 无需使用
    findChild
    ,因为
    loadUi
    已经为小部件创建了python实例属性:您已经可以访问
    self.QuitButton
    ,等等
  • 避免对变量和属性使用大写名称。在(aka,PEP-8)上阅读更多关于此代码样式和其他代码样式的建议

非常感谢您的解释,真的解决了。另外,旁注也很有用,我现在要读一下《风格指南》。
        self.ProductInfo.clicked.connect(lambda: self.createNewWindow(InfoProduct))

    def createNewWindow(self, _class):
        self.newWindow = _class()