2014-03-19 9 views
2

首先,對不起,我的語言,英語不是我的母語: -/的wxPython:GDI ressources wxFrame.destroy後,不會釋放()

我使用wxPython的2.8/2.7蟒與Windows一些麻煩。

我的應用程序使用wxPython現在相當大,並使用了很多小部件。我的問題是:在for循環中,我打開一個框架作爲變量(myVar = myFrame(...)),並給它一些值/變量(如 - >myVar.setval('xx', 42))。然後,它會填充一些textareas,網格等,從我的數據庫中的一些請求(從子框架)。在特性的結尾處,我的子框架會生成一個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()。

這似乎現在:-)

+0

你正在進入一些相當低層次的東西,所以你可能想在這裏細讀一般的Python垃圾收集方法,並在[this module]上閱讀(http://docs.python.org/ 2/library/gc.html) – wnnmaw

+0

[此問題](http://stackoverflow.com/questions/4484167/details-how-python-garbage-collection-works)應該在你的研究中有用 – wnnmaw

+0

不幸的是,python垃圾收集器不收集隊列中的GDI對象以從wxpython中刪除 –

回答

0

OP是OK似乎找到解決方案。

我找到的解決方案是調用wx.Yield()釋放未使用的 資源。但是這隻能在linux上完美工作。在Windows上,我需要 來調用wx.Frame.DestroyChildren()。