【问题标题】:images in layers with movement and transparency - wxpython具有运动和透明度的图层中的图像 - wxpython
【发布时间】:2013-03-29 16:12:39
【问题描述】:

这可能听起来像 Photoshop 中的“图层中的图像”不恰当,但实际上这就是我所拥有的并且想要实现的。

在启动我的程序后,我使用一组 wx.boxsizer 来获得一个漂亮且有条理的屏幕。

在水平 wx.BoxSizer 的一行中,我有 3 列使用不同的 wx.Panels 完成,每一列都包含由 Timer 函数完成的移动 wx.StaticBitmaps。

中间的第二个wx.Panel与保持原始面板大小的比例为0,实际上包含2个图像,一个具有透明度的PNG和移动的wx.StaticBitmap,它应该是这个PNG的背景。

这不适合我。我只是希望PNG位于由计时器移动的另一个图像之上。 2层,如果你喜欢。

它正在创建一个非常简单和基本的动作效果(就像 PNG 中的对象正在运行)

现在我想了一些方法来解决这个问题,但都没有奏效:

  1. 弄清楚 python 如何决定将哪个图像放在前面,哪些留在后面。操纵它
  2. 将运动图像保留在尺寸调整器中,取出 PNG 并将其放在运动图像上(比我需要动态确定运动图像在哪里)
  3. 将动态图像设置为 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)

我确实对此进行了研究,但我是一个初学者,所以如果可能的话,请帮助我提供一些简单的提示或建议。

谢谢。

【问题讨论】:

    标签: image python-2.7 bitmap wxpython boxsizer


    【解决方案1】:

    在 wxpython 演示安装中有一个包含 pySketch 演示的示例文件夹。

    在这段代码中,它创建了可以在其他对象前后移动的直流绘制对象。

    快速浏览一下这段代码,看起来绘制的项目存储在一个列表中,然后按列表顺序绘制。

    我想这就是您实现分层的方式,您将拥有一个层列表,并且在每一层中您将存储该层的项目。

    【讨论】:

    • 嗯,我确实检查了pySketch,但我认为这对于我需要的东西来说太复杂了。无论如何,仅仅因为这对我来说太过分了,但这并不意味着它不是正确的答案,所以我会接受它,但会尝试寻找一个更简单的解决方案。感谢您的宝贵时间!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-16
    • 1970-01-01
    • 1970-01-01
    • 2012-03-06
    • 2019-05-18
    • 2015-05-15
    • 2017-12-18
    相关资源
    最近更新 更多