読者です 読者をやめる 読者になる 読者になる

みーのぺーじ

みーが趣味でやっているPCやソフトウェアについて.Unity, Python, Processingなどのプログラミングや,脱獄, hackintoshなど

トップ / 記事一覧 / カテゴリ

wxPythonでアニメーション

Python

wxPythonはクロスプラットフォームで、PythonのGUIライブラリーです。Tcl/Tk や Tkinter には伝統がありますが、あまりかっこ良くないので、wxPyhtonを使ってみます。

wx.DCを使ってアニメーションをするときのひな形。#begin drawingと#end drawingの間で、dc.Draw...()などとします。wx.Timerで一定確率で描写します。チラツキは起こらないはずです。色が変えてあるところをいじればカスタマイズできるようになっています。

以下、ソースコード。

import wx

class myWindow(wx.Window):
    def __init__(self, parent, ID):
        wx.Window.__init__(self, parent, ID, style=wx.NO_FULL_REPAINT_ON_RESIZE)
        self.SetBackgroundColour("WHITE")
        self.InitBuffer()
        self.Bind(wx.EVT_PAINT, self.OnPaint)
        self.createTimer()

    def InitBuffer(self):
        size = self.GetClientSize()
        self.buffer = wx.EmptyBitmap(max(1,size.width), max(1,size.height))
        dc = wx.BufferedDC(None, self.buffer)
        dc.SetBackground(wx.Brush(self.GetBackgroundColour()))
        dc.Clear()

    def createTimer(self):
        self.timer = wx.Timer(self)
        self.timer.Start(100)
        self.Bind(wx.EVT_TIMER, self.onTimer, self.timer)

    def onTimer(self,event):
        self.InitBuffer()
        dc = wx.BufferedDC(wx.ClientDC(self), self.buffer)
        dc.BeginDrawing()
        # begin drawing
        dc.SetPen(wx.pen("black",3,wx.SOLID))
        dc.DrawText("message",20,20)
        dc.SetPen(wx.Pen("black", 2, wx.SOLID))
        dc.DrawLine(0,self.counter*4,640,self.counter*4)
        # end drawing
        dc.EndDrawing()

    def OnPaint(self, event):
        dc = wx.BufferedPaintDC(self, self.buffer)

class myFrame(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__(self, parent, -1, "myFrame", size=(800,600),
                style=wx.DEFAULT_FRAME_STYLE | wx.NO_FULL_REPAINT_ON_RESIZE)
        mywindow = myWindow(self, -1)


if __name__ == "__main__":
    app = wx.PySimpleApp()
    frame = myFrame(None)
    frame.Show(True)
    app.MainLoop()