You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 19:48:17