0

私は仮想サッカープレイブックを作成しようとしていますが、サッカープレイ用のビットマップ(この場合はXまたはO)をドラッグアンドドロップできる必要があります。これが私のコードの一部です。

class NewDefense(wx.Frame):

    def __init__(self,parent,id):
        wx.Frame.__init__(self, parent, id, 'New Defense', wx.Point (0,0), size=(1000,700), style=wx.MINIMIZE_BOX|wx.SYSTEM_MENU|wx.CAPTION|wx.CLOSE_BOX|wx.CLIP_CHILDREN)
        self.SetBackgroundColour('#2a2a2a')
        bg = wx.Panel(self)
        wx.Frame.CenterOnScreen(self)

        x2 = wx.Image(defense, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
        data = wx.BitmapDataObject(x2)

        ################# This is where the problem is.        

        drag = wx.DragImage(x2)
        drag.BeginDrag((0,0), self, fullScreen=False, rect=None)
        drag.Show() 
        #drag.Move()
        drag.EndDrag()
        #################  

        ##LINE
        wx.StaticBitmap(bg, wx.NewId(), x2, (330, 270), (x2.GetWidth(), x2.GetHeight()))
        wx.StaticBitmap(bg, wx.NewId(), x2, (410, 270), (x2.GetWidth(), x2.GetHeight()))
        wx.StaticBitmap(bg, wx.NewId(), x2, (490, 270), (x2.GetWidth(), x2.GetHeight()))
        wx.StaticBitmap(bg, wx.NewId(), x2, (570, 270), (x2.GetWidth(), x2.GetHeight()))

        ##LINE-BACKERS
        wx.StaticBitmap(bg, wx.NewId(), x2, (320, 160), (x2.GetWidth(), x2.GetHeight()))
        wx.StaticBitmap(bg, wx.NewId(), x2, (450, 160), (x2.GetWidth(), x2.GetHeight()))
        wx.StaticBitmap(bg, wx.NewId(), x2, (580, 160), (x2.GetWidth(), x2.GetHeight()))

私が今持っているものは最終的には機能しますか?何を変更または調査する必要がありますか?私はこのトピックをあちこち検索しましたが、それは私にとって非常に混乱しています。私に何ができるかについて何か提案はありますか?

注:これは私のコードのほんの一部です。さらに必要な場合はお知らせください。

プログラムを実行しようとしましたが、ビットマップを移動できません。そして、ptはどうあるべきですか?ビットマップの場所または移動先は?移動先の場合ドラッグできるようにしたいので、正確な場所がまだわからない場合は、移動先をどのように設定すればよいですか?

4

1 に答える 1

0

この前のSOの質問のアドバイスに従って、wxPythonデモキットをダウンロードしてインストールしました(このページに移動して、wxPythonのバージョンに一致するデモをダウンロードしてください)。ご覧いただけるサンプルコードがいくつかあります(デモを開いて「dragimage」を検索するだけです)。

問題は、initでドラッグイベントを開始することであるようです(を呼び出すときBeginDrag())。デモによると、BeginDrag()実際にドラッグアクションを開始しているとき、つまりユーザーが画像をクリックして押したままになっているときにのみ呼び出す必要があります。同様に、EndDrag()ユーザーが画像を解放するまでメソッドを呼び出さないでください。

デモ全体をコピーして貼り付けるつもりはありませんが、主なポイントは次のとおりです。

  • イベントをキャッチwx.EVT_LEFT_DOWNし、ユーザーが画像をクリックしたかどうかを確認する必要があります。ユーザーが画像をクリックした場合は、BeginDrag()
  • イベントをキャッチwx.EVT_MOTIONし、A)現在画像をドラッグしているかどうか、B)Aが現在のマウスの位置に画像を描画しているかどうかを確認する必要があります。
  • イベントをキャッチする必要がありwx.EVT_LEFT_UPます。ユーザーが現在画像をドラッグしている場合は、EndDrag()メソッドを呼び出して画像を最終的な場所に配置します。

上で提案したように、wxPythonデモをダウンロードすると、完全に機能する例とそのすべてのコードを見ることができます。

于 2012-07-16T04:06:29.530 に答える