我一直试图找到一种在帧中拖动图像的方法,但所有搜索结果都是关于拖放功能。
我已经尝试过它。我可以在拖动的同时使用从事件对象获得的坐标一遍又一遍地重新创建图像,但是当窗口被大量图像咔哒声时,这会变得混乱。
def OnDrag(self, event):
if event.Dragging():
self.dragging = True
if not self.drag_pos:
self.drag_pos = event.GetPosition()
else:
pos = event.GetPosition()
if self.drag_pos[0] > pos[0]:
if self.drag_pos[-1] > pos[-1]:
displacement = (10, 10)
else:
displacement = (10, -10)
else:
if self.drag_pos[-1] > pos[-1]:
displacement = (-10, 10)
else:
displacement = (-10, -10)
self.page_pos = (self.page.GetPosition() - displacement)
# self.page.Destroy() # Here causes Segmentation Fault: 11
self.page = wx.StaticBitmap(self, wx.ID_ANY, self.img.ConvertToBitmap(), size=(self.width, self.height), pos=self.page_pos)
完整代码here。
如果我试图在OnDrag事件处理程序中的StaticBitmap上调用.Destroy
,则会导致分段错误。
我试图在StaticBitmap上调用.SetPosition
,但它没有做任何事情。
我还尝试在.Refresh
之后.SetPosition
使用StaticBitmap,但它会停止拖动事件。
我尝试了wx.DragImage
和wx.CallLater
,但无济于事。
我很感激这个问题的任何帮助。
修改
我尝试过无法解决。所以我将位图放在框架的背景中,而不是将它们放在StaticBitmap
中。它解决了我的主要问题。当然,它需要一些提炼。如果任何试图解决类似问题的人都需要一个例子,那么code就是这样的。