我正在尝试将背景图像添加到某些文本中,我希望通过使用MemoryDC将文本写入图像然后将其放置在我的GridSizer中来实现此目的。
除了我不能使用现有图像绘制文本之外,一切都按照我想要的方式工作,我必须创建一个新的,空的位图,这对我来说毫无意义,因为它让我回到了我开始的地方。 / p>
这是我的代码,它将一个白色框放入我的GridSizer中,并在其上绘制文字:
w, h = 150,64
bmp = wx.EmptyBitmap(w,h)
dc = wx.MemoryDC()
dc.SelectObject(bmp)
dc.Clear()
text = 'whatever'
tw, th = dc.GetTextExtent(text)
dc.DrawText(text, (w-tw)/2, (h-th)/2)
dc.SelectObject(wx.NullBitmap)
output_bitmap = wx.StaticBitmap(self, -1, bmp)
return output_bitmap
现在,更改相同的代码以尝试使用现有图像:
png = wx.Image(location, wx.BITMAP_TYPE_PNG).ConvertToBitmap()
bmp = wx.StaticBitmap(self, -1, bitmap = png, size=(150, 64))
dc = wx.MemoryDC()
dc.SelectObject(bmp)
dc.Clear()
text = 'whatever'
tw, th = dc.GetTextExtent(text)
dc.DrawText(text, (w-tw)/2, (h-th)/2)
dc.SelectObject(wx.NullBitmap)
output_bitmap = wx.StaticBitmap(self, -1, bmp)
return output_bitmap
这会出现以下错误消息:
File "/home/user/projects/project/base.py", line 267, in online_indicator
dc.SelectObject(bmp)
File "/usr/lib/python2.7/dist-packages/wx-2.8-gtk2-unicode/wx/_gdi.py", line 4783, in SelectObject
return _gdi_.MemoryDC_SelectObject(*args, **kwargs)
TypeError: in method 'MemoryDC_SelectObject', expected argument 2 of type 'wxBitmap &'
我也尝试过使用dc.DrawLabel但不接受我的位图图像。
编辑:
想想我可能就在那里,开始使用dc.DrawImageLabel,现在我可以从或中提取 图像或文本,我可以看到它应该能够绘制两者但由于某种原因它不会,这是我的新代码:
绘制文字:
png = wx.Image(location, wx.BITMAP_TYPE_PNG).ConvertToBitmap()
want_bmp = wx.StaticBitmap(self, -1, bitmap = png, )
w, h = 150,64
bmp = wx.EmptyBitmap(w,h)
dc = wx.MemoryDC()
dc.SelectObject(bmp)
dc.Clear()
rect = bmp.GetRect()
dc.DrawImageLabel(text='this',image=wx.NullBitmap, rect=rect, alignment=10)
dc.SelectObject(wx.NullBitmap)
output_bitmap = wx.StaticBitmap(self, -1, bmp)
return output_bitmap
绘制图片:
png = wx.Image(location, wx.BITMAP_TYPE_PNG).ConvertToBitmap()
want_bmp = wx.StaticBitmap(self, -1, bitmap = png, )
w, h = 150,64
bmp = wx.EmptyBitmap(w,h)
dc = wx.MemoryDC()
dc.SelectObject(bmp)
dc.Clear()
rect = bmp.GetRect()
dc.DrawImageLabel(text='this',image=wx.Bitmap(location), rect=rect, alignment=10)
dc.SelectObject(wx.NullBitmap)
output_bitmap = wx.StaticBitmap(self, -1, bmp)
return output_bitmap
答案 0 :(得分:3)
MemoryDC适用于Bitmap,而不是StaticBitmap控件。
此外,您可以直接加载位图,无需使用Image对象。
bitmap = wx.Bitmap(location)
dc = wx.MemoryDC(bitmap)
text = 'whatever'
w, h = dc.GetSize()
tw, th = dc.GetTextExtent(text)
dc.DrawText(text, (w - tw) / 2, (h - th) / 2) #display text in center
del dc
control = wx.StaticBitmap(self, -1, bitmap)