ダブルバッファリングされたカスタムテキストウィジェットを作成しようとしています(ちらつきを避けるため)。しかし、私はいくつかのことができるようになりたいです。それでも、使用すべき正確な方法がわかりません。
最初の2つは簡単です。背景と前景色を変更したいだけです。
ですから、多かれ少なかれ、self.Draw()でself.Textのテキストの色を変更できるようにしたいと思います。
スニペット:
self.Text = mdc.DrawText(self.TextString, 10, 0)
self.MemoryDCの背景(塗りつぶし)色として販売されています。
次に、 self.Textを中央に配置する方法を知っている人はいますか?最後に、作成後にself.Textを構成するにはどうすればよいですか?
これまでのウィジェット:
class DynamicText (wx.Panel):
def __init__(self, par):
self.Par = par
wx.Panel.__init__(self, self.Par)
self.Time = Time(self, func=self.SetTime)
self.Dim = self.Par.GetClientSize()
self.SetSize(self.Dim)
self.Bind(wx.EVT_SIZE, self.Resize)
self.Bind(wx.EVT_ERASE_BACKGROUND, self.Erase)
self.Bind(wx.EVT_PAINT, self.Paint)
def Set (self, text) :
self.TextString = text
def SetTime (self, time) :
self.Set(str(time))
self.Resize(None)
def Resize(self, event):
self.Width, self.Height = self.GetSize()
bitmap = wx.EmptyBitmap(self.Width, self.Height)
self.MemoryDC = wx.MemoryDC(bitmap)
''' Redraws **self.MemoryDC** '''
mdc = self.MemoryDC
''' Deletes everything from widget. '''
mdc.Clear()
fs = 11
font = wx.Font( fs, wx.DEFAULT, wx.NORMAL, wx.NORMAL)
mdc.SetFont(font)
self.Draw()
self.Refresh()
def Draw (self) :
mdc = self.MemoryDC
self.Text = mdc.DrawText(self.TextString, 10, 0)
def Erase(self, event):
''' Does nothing, as to avoid flicker. '''
pass
def Paint(self, event):
pdc = wx.PaintDC(self)
w, h = self.MemoryDC.GetSize()
pdc.Blit(0, 0, w, h, self.MemoryDC, 0, 0)