0

Photoshop のような不適切な「レイヤー内の画像」に聞こえるかもしれませんが、実際にはそれが私が持っているものであり、機能させたいと考えています。

プログラムを起動した後、wx.boxsizer のセットを使用して、素敵で整理された画面を表示します。

Horizo​​ntal wx.BoxSizer の 1 つの行には、異なる wx.Panels で行われた 3 つの列があり、それぞれに Timer 関数によって行われた wx.StaticBitmaps の移動が含まれています。

元のパネル サイズを維持するために 0 の割合で中央にある 2 番目の wx.Panel には、実際には 2 つの画像が含まれています。

これは私にとってはうまくいきません。タイマーによって移動される他の画像の上に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)

私はこれに研究を入れましたが、私はかなり初心者なので、可能であれば簡単なヒントや提案を手伝ってください.

ありがとう。

4

1 に答える 1

1

wxpython デモ インストールには、pySketch デモを含むサンプル フォルダがあります。

このコードでは、他のオブジェクトの前後に移動できる DC 描画オブジェクトを作成します。

このコードをざっと見てみると、描画されたアイテムがリストに格納され、リストの順序で描画されているように見えます。

それがレイヤーの実装方法だと思います。レイヤーのリストがあり、各レイヤーにそのレイヤーのアイテムを保存します。

于 2013-03-29T17:08:41.743 に答える