2012-05-07 5 views
0

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

これはどういうことでしょうか?そうでない場合は、無限ループを防ぐ方法がありますか?

解決策の1つがwx.Timerを使用していましたが、調整可能な間隔で同じループが発生したばかりです。機能OnDraw

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

代わり属性(dc代わりにself.dc)を使用してローカル変数dcを作成します。

+0

私はクラスのdc属性を作成し、複数のメソッドでアクセスできるようにしました。それが属性ではない場合、私は互いに重なり合う複数の図面を作成しようとしましたが、結果は同じでした。私はただ一つのメソッドで全ての描画をしなければならないと思う。 –

+0

これらのメソッドにはいつも 'dc'というパラメータを追加して' OnDraw'から呼び出すことができます:) DCはEVT_PAINTハンドラ内に作成する必要があります。 'OnPaint'メソッドを手動で呼び出します(なぜデフォルトのパラメータ?)。 – uhz

+0

これを試しましたが、同じ無限ループでした。たぶん私は、図面の準備のために複数の方法を使用することができますが、1つの方法で実際の図面を行うかもしれません。助けてくれてありがとう –