需要帮助在wxPython中使用self.MemoryDC
问题描述:
我试图制作一个双缓冲自定义文本小部件(为了避免闪烁)。 但是,我希望能够做一些事情。然而,我不确定我应该使用的确切方法。需要帮助在wxPython中使用self.MemoryDC
前两个很容易我只是想改变背景和前景色。
所以或多或少我希望能够在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)
答
我不明白你在创建后配置self.Text的意思。如果你想在绘制后改变文字 - 你不能。一旦你将它提交给DC,它就在那里,而改变它的唯一方法就是清除DC并重新绘制它。就你而言,当文本更新时你似乎需要做的就是再次调用Resize(),强制重绘。请注意,DrawText()
什么都不会返回,因此您的self.Text
的值将是None
。你绝对不能用那来指代绘制的文字。 :d
至于其他的,这里是一个居中的文本和油漆它蓝色draw()方法的一个例子:它被画成配置后
def Draw(self) :
mdc = self.MemoryDC
dc_width, dc_height = mdc.GetSizeTuple()
text_width, text_height, descent, externalLeading = mdc.GetFullTextExtent(self.TextString)
x = (dc_width - text_width)/2
y = (dc_height - text_height)/2
mdc.SetTextForeground('Blue')
mdc.DrawText(self.TextString, x, y)
是的,我的意思是改变文本的能力。我是wxPython的新手,所以我仍然试图弄清它的来龙去脉。根据我的理解,** wx.MemoryDC()**可以像Tkinter Canvas小部件一样工作。您可以在该特定的小部件上配置文本,而无需重新绘制它。谢谢! – rectangletangle 2011-05-14 09:31:23