gpt4 book ai didi

python - wxPython : GDI ressources are not release after wxFrame. 销毁()

转载 作者:可可西里 更新时间:2023-11-01 10:46:31 25 4
gpt4 key购买 nike

首先,对不起我的语言,英语不是我的母语:-/

我在 Windows 上使用 wxpython 2.8/python 2.7 时遇到了一些问题。

我使用 wxPython 的应用程序现在非常大并且使用了很多小部件。我的问题是:在 for 循环中,我打开一个框架作为变量 (myVar = myFrame(...)),并给它一些值/变量(比如 -> myVar. setval('xx', 42)) 。然后,它将根据我的数据库中的一些请求(来自子框架)填充一些文本区域、网格等。在特征结束时,我的子框架生成一个 pdf 文件,并打印它,然后它用原始的 self.Destroy() 方法关闭自己,没有附加费, wx.Frame

使用相同的变量(示例中的 myVar)一个接一个地创建了很多帧。但是,最近,我发现了一些问题,我的循环中的迭代次数比平时多......使用相同的配置(从数据库转储的相同数据),在我的循环中经过一定次数的迭代后,它总是在完全相同的时刻崩溃(而不是在特定数据上)。

WxPython 使用 Windows 允许的最大 GDI 量(错误 1158)。事实上,我从被破坏的框架中获取的 GDI 资源并没有被释放!我读到有一个被销毁对象的队列,当 wxPython 中没有更多事件在等待时等待真正被杀死,然后由于不断的工作(循环)它们不会被释放。在 linux 上,没有这个问题,一切正常(但我需要它在 Windows 上工作)。我尝试了 wx.Yield 方法但没有任何改变......我查看了线程,但 GUI 小部件必须在 wx 主循环中使用...

如果你们中有人有想法,那就太好了!

[已解决]我找到的解决方案是调用 wx.Yield() 来释放未使用的资源。但这只能在 linux 上完美运行。在 Windows 上,我需要调用 wx.Frame.DestroyChildren()。

目前看来还可以:-)

最佳答案

OP 似乎找到了解决方案。

The solution I found is to call wx.Yield() to releases unused ressources. But this only work perfectly on linux. On windows, i need to call wx.Frame.DestroyChildren().

关于python - wxPython : GDI ressources are not release after wxFrame. 销毁(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22511472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com