我试图在一些文本中添加一个背景图像,我希望通过使用MemoryDC将文本写入图像,然后将其放入我的GridSizer中。在
一切都按我所希望的那样工作,除了我不能使用现有的图像来绘制文本,我必须创建一个新的,空的,位图,这对我来说是毫无意义的,因为它让我回到我开始的地方。在
这是我的代码,它在我的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
下面是更改为尝试使用现有图像的相同代码:
^{pr2}$这将给出以下错误消息:
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.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
MemoryDC使用位图,而不是StaticBitmap控件。在
此外,您可以直接加载位图,而不需要使用图像对象。在
相关问题 更多 >
编程相关推荐