0

wxpythonでパネルに簡単な絵(線、円など)を描きたいと思います。どこかで見つけたサンプルコードを修正しました。正常に動作しますが、ウィンドウを最小化するか、別のウィンドウに切り替えて元に戻すまでです。その後、無限ループで再描画を開始します。

これは起こるべきですか?そうでない場合、無限ループを防ぐ方法はありますか?

私が見つけた1つの解決策は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()
4

1 に答える 1

1

関数では、属性 (の代わりに) を使用する代わりにOnDrawローカル変数を作成します。dcdcself.dc

于 2012-05-07T13:36:35.933 に答える