PySide6二次打开窗口时触发TypeError错误求助
问题分析与解决
错误原因
你把方法名和实例变量名弄成同一个了:主窗口里的方法叫connect_modbus,第一次调用这个方法时,你又把创建的窗口实例赋值给了self.connect_modbus,这就把原来的方法给覆盖了。第二次再想调用connect_modbus()时,实际上是在调用那个已经创建的窗口对象,而对象本身不是可调用的,所以触发TypeError: 'ConnectModbusWindow' object is not callable错误。
解决方法
方法一:修改实例变量名(最简单直接)
把实例变量的名字改成和方法名不一样的,比如self.connect_modbus_window,这样就不会覆盖原方法了:
def connect_modbus(self): # connect with modbus self.connect_modbus_window = ConnectModbusWindow() self.connect_modbus_window.show()
方法二:复用窗口实例(避免重复创建)
如果希望关闭窗口后不销毁实例,下次打开直接显示,可以给窗口设置WA_DeleteOnClose属性,同时先检查实例是否存在:
from PySide6.QtCore import Qt def connect_modbus(self): # 检查窗口是否已创建且可见,没有则新建 if not hasattr(self, 'connect_modbus_window') or not self.connect_modbus_window.isVisible(): self.connect_modbus_window = ConnectModbusWindow() # 设置关闭窗口时不销毁实例 self.connect_modbus_window.setAttribute(Qt.WA_DeleteOnClose, False) self.connect_modbus_window.show()
内容的提问来源于stack exchange,提问作者maja95
相关产品推荐
相关产品推荐

