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 question的建议,我下载并安装了 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 回答