gpt4 book ai didi

wxPython 内存泄漏与 setValue

转载 作者:行者123 更新时间:2023-12-02 02:36:17 27 4
gpt4 key购买 nike

我在 Mac OS X 10.6.8、wxPython 2.9.3.1 和 64 位 Python v2.7.2 下运行以下代码:

import wx

class MyFrame(wx.Frame):
def __init__(self):
super(MyFrame,self).__init__(None, title="Frame", size=(100, 100))
self.field = wx.TextCtrl(self, -1, "Text", (30, 7))
def startLoop(self):
counter = 0
while True:
counter += 1
self.field.SetValue(str(counter))
wx.Yield()
class Main(wx.App):
def __init__(self):
self.counter = 0
super(Main,self).__init__(0)

def OnInit(self):
self.frame = MyFrame()
self.frame.Show()
self.frame.startLoop()
self.MainLoop()
return True
Main()

它只会占用更多内存。是我做错了什么,还是 wxPython 严重损坏了?最重要的是有一个解决方法,因为我已经编写了一个基于 wxPython 的巨大 GUI。

非常感谢!

wx.StaticText 在上面的代码中泄漏完全相同。

最佳答案

Mike 的回答至少是部分正确的,如果可以的话,最好避免使用 wx.Yield。切换到使用 EVT_IDLE 事件后,仍然存在明显的内存泄漏,尽管它比以前小得多,也慢得多。切换到 wx.StaticText 而不是 wx.TextCtrl 显示根本没有泄漏,因此似乎确实存在与 wx.TextCtrl.SetValue 相关的问题。请在 trac.wxwidgets.org 上制作一张票,将组件设置为 wxOSX-cocoa,并包含指向此页面的链接。

import wx

class MyFrame(wx.Frame):
def __init__(self):
super(MyFrame,self).__init__(None, title="Frame", size=(100, 100))
##self.field = wx.TextCtrl(self, -1, "Text", (30, 7))
self.field = wx.StaticText(self)

def startIdle(self):
self.counter = 0
self.Bind(wx.EVT_IDLE, self.onIdle)

def onIdle(self, evt):
self.counter += 1
##self.field.SetValue(str(self.counter))
self.field.SetLabel(str(self.counter))
evt.RequestMore()


class Main(wx.App):
def OnInit(self):
self.frame = MyFrame()
self.frame.Show()
self.frame.startIdle()
self.MainLoop()
return True
Main()

关于wxPython 内存泄漏与 setValue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11564123/

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