我有三个问题,我可以真正使用一些帮助。希望我不要求太多。
1)我正在设计一个包含一个框架和一个面板的简单GUI。假设我使用直流在面板上绘制了两张图像。一个图像将不断淡入和淡出(在计时器上),第二个图像将静止(不变)。通过更改图像的不透明度来完成淡入淡出,并在重新绘制新版本的图像之前使用dc.Clear()。
我的问题是:如何在不影响不改变的第二张图像的情况下绘制淡入/淡出图像?这似乎会导致不必要的绘图,因为静止图像将与淡化图像一起重绘。我可以选择性地清除第一张图像而不影响第二张图像吗?这是我的绘图功能:
def on_paint(self, event):
dc = wx.PaintDC(self)
dc = wx.BufferedDC(dc)
brush = wx.Brush('#3B3B3B')
dc.SetBackground(brush)
dc.Clear()
# Draw the first image (stationary)
dc.DrawBitmap(stationaryBitmap, 120, 0, True)
# Draw the second image (fading)
image = self.image.AdjustChannels(1, 1, 1, self.factoralpha)
fadingBitmap = wx.BitmapFromImage(image)
dc.DrawBitmap(fadingBitmap, 120, 0, True)
2)如何将事件绑定到wx.Image对象?我希望能够点击淡入/淡出图像,但我似乎无法为其分配ID。目标是绑定一个类似于我可以用wx.StaticBitmap做的事件。
self.image = wx.Image("C:\image.png", wx.BITMAP_TYPE_PNG)
# Trying to bind an event, but no ID is assigned
self.Bind(wx.EVT_BUTTON, self.go_button, id=self.image.GetId())
3)是否可以将wx.DrawBitmap放入sizer中?它似乎只需要一个x,y坐标对。
dc.DrawBitmap(bitmap, 120, 0, True)
谢谢大家。
答案 0 :(得分:0)
1)对于Performance,我建议使用MemoryDC并仅在需要时更新Drawing。见这里:BufferedCanvas。您可能希望使用2个以上的缓冲区,因为您使用的是2个图像(参见示例)。
2)我不知道有关此问题,但您是否尝试过对面板进行绑定并将面板淡入/淡出? 您可以直接在wx.Panel上绘画。
此致