首先,对不起我的语言,英语不是我的母语:-/
我在 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/