我正在尝试制作虚拟足球剧本,并且需要能够拖放足球比赛的位图(在本例中为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()))
我现在最终会工作吗?我应该改变或研究什么?我已经搜遍了这个话题,这让我感到很困惑。关于我能做什么的任何建议?
注意:这只是我的代码的一小部分。如果需要更多,请告诉我。
我尝试运行该程序,我无法移动位图。该怎么办?位图的位置或移动到的位置?如果我移动到哪里,如果我还没有确切的位置因为我想能够拖动
答案 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演示,您可以看到完整的工作示例及其所有代码。