wx.Dragimage无效

时间:2012-07-16 00:11:43

标签: python wxpython

我正在尝试制作虚拟足球剧本,并且需要能够拖放足球比赛的位图(在本例中为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()))

我现在最终会工作吗?我应该改变或研究什么?我已经搜遍了这个话题,这让我感到很困惑。关于我能做什么的任何建议?

注意:这只是我的代码的一小部分。如果需要更多,请告诉我。

我尝试运行该程序,我无法移动位图。该怎么办?位图的位置或移动到的位置?如果我移动到哪里,如果我还没有确切的位置因为我想能够拖动

1 个答案:

答案 0 :(得分:0)

根据this previous SO question的建议,我下载并安装了wxPython演示工具包(转到this page并下载与您的wxPython版本相匹配的演示版)。它有一些示例代码,您可以查看(只需打开演示并搜索“dragimage”)。

问题似乎是你在init中开始拖动事件(当你调用BeginDrag()时)。根据演示,BeginDrag()只应在实际开始拖动操作时调用,即当用户单击并按住图像时。同样,在用户释放图像之前,不应调用EndDrag()方法。

我不打算复制并粘贴整个演示,但主要内容是:

  • 您需要捕获wx.EVT_LEFT_DOWN个事件并检查用户是否点击了图片。如果用户确实点击了图片,那么您应该致电BeginDrag()
  • 您需要捕捉wx.EVT_MOTION个事件,并检查A)如果您当前正在拖动图像而B)如果A然后在当前鼠标位置绘制图像。
  • 您需要捕获wx.EVT_LEFT_UP个事件,如果用户当前正在拖动图片,请调用EndDrag()方法并将图片放在最终位置。

如果您按照我的建议下载wxPython演示,您可以看到完整的工作示例及其所有代码。