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()