听起来像 Photoshop 中的“图层中的图像”可能不合适,但实际上这就是我所拥有的并且想要实现的。
在启动我的程序后,我使用一组 wx.boxsizer 来获得一个漂亮且有条理的屏幕。
在水平 wx.BoxSizer 的一行中,我有 3 列使用不同的 wx.Panels 完成,每一列都包含由 Timer 函数完成的移动 wx.StaticBitmaps。
中间的第二个 wx.Panel 与保持原始面板大小的比例为 0,实际上包含 2 个图像,一个具有透明度的 PNG 和移动的 wx.StaticBitmap,它应该是这个 PNG 的背景。
这不适合我。我只是希望PNG位于由计时器移动的另一个图像之上。2层,如果你喜欢。
它正在创建一个非常简单和基本的动作效果(就像 PNG 中的对象正在运行)
现在我想到了一些方法来解决这个问题,但没有一个奏效:
- 弄清楚 python 如何决定将哪个图像放在前面,哪些留在后面。操纵那个
- 将运动图像保留在大小调整器中,取出 PNG 并将其放在运动图像上(比我需要动态确定运动图像在哪里)
- 将运动图像设为 wx.panel 背景,然后我可以简单地调用透明 PNG。
我将在此处粘贴我的脚本的一部分以供勇敢的眼睛使用:
class AnimationPanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
self.loc = wx.Image("intro/runner.png",wx.BITMAP_TYPE_PNG).ConvertToBitmap()
self.locpic = wx.StaticBitmap(self, -1, self.loc, (0, 0), (self.loc.GetWidth(), self.loc.GetHeight()))
self.xer = 3080
self.xer2 = 2310
self.xer3 = 1540
self.env = wx.Image("intro/environ1.png",wx.BITMAP_TYPE_PNG).ConvertToBitmap()
self.env2 = wx.Image("intro/environ2.png",wx.BITMAP_TYPE_PNG).ConvertToBitmap()
self.env3 = wx.Image("intro/environ3.png",wx.BITMAP_TYPE_PNG).ConvertToBitmap()
self.picture = wx.StaticBitmap(self, -1, self.env, (0, 0), (self.env.GetWidth(), self.env.GetHeight()))
self.picture2 = wx.StaticBitmap(self, -1, self.env2, (770, 0), (self.env2.GetWidth(), self.env2.GetHeight()))
self.picture3 = wx.StaticBitmap(self, -1, self.env3, (1540, 0), (self.env3.GetWidth(), self.env3.GetHeight()))
self.timer = wx.Timer(self)
self.Bind(wx.EVT_TIMER, self.OnTimer, self.timer)
self.timer.Start(5)
def OnTimer(self, event):
if self.xer <= 3080:
self.xer += 1
self.picture.Move((self.xer,0))
else:
self.xer = -770
if self.xer2 <= 3080:
self.xer2 += 1
self.picture2.Move((self.xer2,0))
else:
self.xer2 = -770
if self.xer3 <= 3080:
self.xer3 += 1
self.picture3.Move((self.xer3,0))
else:
self.xer3 = -770
这是在主框架中:
ap = AnimationPanel(self)
v2box = wx.BoxSizer(wx.HORIZONTAL)
v2box.Add(someother, 1, wx.EXPAND)
v2box.Add(ap, 0, wx.EXPAND)
v2box.Add(someother, 1, wx.EXPAND)
我确实对此进行了研究,但我是一个初学者,所以如果可能的话,请帮助我提供一些简单的提示或建议。
谢谢。