PyQt-Fluent-Widgets icon indicating copy to clipboard operation
PyQt-Fluent-Widgets copied to clipboard

InfoBar有时出现错误堆栈错误

Open qianye216 opened this issue 1 year ago • 10 comments

直接使用Vscode运行程序,有时看到终端报以下错误,主程序未崩溃闪退 看错误提示应该是infobar的原因:

  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/qfluentwidgets/components/widgets/info_bar.py", line 417, in eventFilter
    return super().eventFilter(obj, e)
RuntimeError: wrapped C/C++ object of type TopInfoBarManager has been deleted

qianye216 avatar Jun 11 '23 07:06 qianye216

应该是因为 InfoBar 对象被销毁了,而 InfoBarManager 没有及时移除对象导致的。讲道理 InfoBar.closeEvent() 里面会发出一个信号让 InfoBarManager 移除自己,不知道为什么这个信号没有发出去

zhiyiYo avatar Jun 11 '23 15:06 zhiyiYo

退出软件的时候偶尔也会触发这个问题,不过不影响正常运行

Cheukfung avatar Jun 16 '23 15:06 Cheukfung

我也有偶尔遇见过,在pyside6上尤为严重,几乎100%复现且偶尔会出现infobar错位,已经开始怀疑是自己的问题了

Xisenqvq avatar Jun 24 '23 21:06 Xisenqvq

我也有偶尔遇见过,在pyside6上尤为严重,几乎100%复现且偶尔会出现infobar错位,已经开始怀疑是自己的问题了

我的 pyside6 不会这样,用的 6.4.2

zhiyiYo avatar Jul 01 '23 15:07 zhiyiYo

image

LxHTT avatar Aug 17 '23 06:08 LxHTT

我也有偶尔遇见过,在pyside6上尤为严重,几乎100%复现且偶尔会出现infobar错位,已经开始怀疑是自己的问题了

可以提供一下最小复现代码吗?

rainzee avatar Oct 31 '23 22:10 rainzee

https://github.com/zhiyiYo/PyQt-Fluent-Widgets/issues/273#issuecomment-1681679234

image

这个错误提示咋做的,没这思路

LimeBow-Studios avatar Nov 04 '23 05:11 LimeBow-Studios

#273 (comment)

image

这个错误提示咋做的,没这思路

接管sys.excepthook,自己处理。 参考https://github.com/MCSLTeam/MCSL2/blob/10f367beaecb52c903022b72cfb7f28cdbf253d7/MCSL2Lib/windowInterface.py#L352C9-L352C24

LxHTT avatar Nov 04 '23 06:11 LxHTT

image

近期我是用InfoBar也出现了RuntimeError,测试环境如下:

  • python 3.10.11
  • Windows 11 23H2
  • PyQt-Flunet-Widgets==1.5.0
  • Nutika==1.8.4/2.0.0

有两种情况会引发RuntimeError

  • 通过脚本运行并正常退出后,偶发性触发RuntimeError
  • 使用Nuitka打包后,当界面中出现InfoBar控件并手动关闭,几秒后程序意外退出,经过debug发现是触发RuntimeError

而测试使用pyinstaller打包程序后按照情况2进行操作,不会触发RuntimeError

问题主要是出在这一段代码上 https://github.com/zhiyiYo/PyQt-Fluent-Widgets/blob/d5aaa7412fff07b5058d5145064e5f643933844c/qfluentwidgets/components/widgets/info_bar.py#L188-L194 经过测试将代码改成这样,就不会触发RuntimeError(场景2已通过测试,但由于场景1具有偶发性,无法立即复现)

    def __fadeOut(self):
        """ fade out """
        try:
                self.opacityAni.setDuration(200)
                self.opacityAni.setStartValue(1)
                self.opacityAni.setEndValue(0)
                self.opacityAni.finished.connect(self.close)
                self.opacityAni.start()
       except RuntimeError:
                pass

至于为什么会出现pyinstaller打包的程序不会出现,而nutika打包的程序会出现,目前原因不明,我猜测可能与GC有一定的关系。

如果有理解不对的地方,请大佬指正。

gcc2001 avatar Feb 18 '24 01:02 gcc2001

主要无法稳定复现,所以也不好修

rainzee avatar Feb 18 '24 12:02 rainzee