Python 第二次实例化类时出错
我是python和PyQt新手,当时正在开发我的第一个应用程序,在尝试再次实例化我创建的类时遇到了一个问题。我有以下错误: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
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
已经为小部件创建了python实例属性:您已经可以访问loadUi
,等等self.QuitButton
- 避免对变量和属性使用大写名称。在(aka,PEP-8)上阅读更多关于此代码样式和其他代码样式的建议
self.ProductInfo.clicked.connect(lambda: self.createNewWindow(InfoProduct))
def createNewWindow(self, _class):
self.newWindow = _class()