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

标签 python windows wxpython gdi

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

我在 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/

相关文章:

Python pandas - 使用应用函数并在数据框中创建新列

python - Pandas - 替换、 float 和列的总和

c++ - 使用 vcpkg 下载依赖项而不创建 dll

python - 如何实现用于测试的内存密集型 python 脚本

python - MapReduce:Mrjob 持久保存结果

windows - Windows 事件跟踪 : OpenTrace/ProcessTrace not returning any events - callback not being called

.net - 如何将超链接与可以在本地执行的任何内容区分开来?

python - WX.Python 和多处理

python - 如何遍历所有 wx.CheckBox 实例?

python - 有没有办法在使用 wx.ListCtrl 单击时仅突出显示一个单元格而不是整行?