wxpython绘制事件无限循环

时间:2012-05-07 12:54:31

标签: wxpython paint infinite-loop

我想在wxpython的面板上绘制一些简单的图画(线条,圆圈等)。我修改了一个我在某处找到的示例代码。它工作正常,但直到我最小化窗口或切换到另一个窗口并返回。然后它开始以无限循环重新绘制。

这应该发生吗?如果没有,有没有办法阻止无限循环?

我发现一个解决方案是使用wx.Timer,但它只是引起了可调节间隔的相同循环。

import math

import wx

class DrawPanel(wx.Frame):

    def __init__(self,parent):
        wx.Frame.__init__(self,parent,title='Drawing on panel')
        self.Bind(wx.EVT_PAINT,self.OnDraw)

    def OnDraw(self,event=None):
        self.dc = wx.PaintDC(self)
        self.dc.Clear()
        self.dc.SetPen(wx.Pen(wx.BLACK,1.5))
        i0 = 1
        for i in range(2,1000,1):
            i = i/10.0
            self.dc.DrawLine(i0,200*math.sin(i0/10)+200,
                        i,200*math.sin(i/10)+200)
            i0 = i

if __name__ == '__main__':
    aplication = wx.App()
    ram = DrawPanel(parent=None)
    ram.Show()
    aplication.MainLoop()

1 个答案:

答案 0 :(得分:1)

在函数OnDraw中创建局部变量dc而不是使用属性(dc而不是self.dc)。