• python pyside pyqt reload TypeError: super(type, obj): obj must be an instance or subtype of type


    python pyside pyqt reload TypeError: super(type, obj): obj must be an instance or subtype of type

    一开始遇到这个问题,在网上找了不少解决方法,这里提供链接仅供参考:https://blog.csdn.net/likesubject/article/details/104472778,https://iwwxiong.com/2019/07/02/python_super_TypeError/

    不过都不能从根本上解决我遇到的问题,在我的模块中有一个全局变量,是一个pyqt mainWindow 对象,在reload这个模块后,这个对象会有一个野地址,然后重新reload一个新的,也就是说这个野地址的对象没有被释放,它的一些事件线程还会触发(例如event事件),不过受到这些参考加上之前pyside帮助文档里面看到的关于垃圾回收的问题:

    不过网上看到有大神说这个解释是针对C++的,在pyqt中,如果一个widget的parent为None,而这个widget被检测到成为野地址,会自动被回收(链接找不到了)。

    然后我抱着尝试的心态,在reload之前,把mainWindow对象的parent设置为None,mainWindow.setParent(None)(突然觉得setParent在python中如此好用),然后reload,果然成功了,事件线程也不再多余的运行,也不会报错,从根本上解决了问题。

    我也尝试了del 对象,发现没有用。

    以后可以放心的reload了。

    但是还有一个问题,如果当前对象在启动的状态下,通过其它方式去reload了当前对象所在的模块,那么也会出现以上的报错,因为所依赖的class被reload了,所以在调用的时候,不要以这种方式:

    super(YourClassType, self).event(event)

    最好以这种方式:

    ParentClassType.event(self,event)

  • 相关阅读:
    【C语言】中的版本规范(C89 C99等)
    【微机】计算机系统组成
    【微机】验证负数以补码存储程序 C语言
    katalon studio升级到6.3.3版本后如何生成测试报告
    使用Katalon Studio进行数据驱动测试的方法(转)
    katalon 参数化
    Katalon中的测试对象、用例和套件的命名规范
    转载kalaton故障处理
    Katalon Studio IE浏览器 不好用 无法录制
    Katalon Studio操作界面详细说明(转载)
  • 原文地址:https://www.cnblogs.com/ibingshan/p/15814026.html
Copyright © 2020-2023  润新知