在wxpython中缩放图片时出现问题

在wxpython中缩放图片时出现问题,python,image,wxpython,drawing,zooming,Python,Image,Wxpython,Drawing,Zooming,我需要在一个滚动的面板上画一个图片(对其进行评论)。我有麻烦,因为它的行为不正确,当我放大或缩小它。它停止绘制,然后在错误的位置显示一段时间。在窗口的左上角。而且画线不正确。 下面是(onLeftDown)功能(应该绘制的按钮)的代码。右键事件(放大)。希望它足够清楚 你们知道发生了什么事吗?我该怎么解决 提前谢谢 def OnLeftButtonEvent(self, event): self.curLine = [] self.x, self.y = event.GetPos

我需要在一个滚动的面板上画一个图片(对其进行评论)。我有麻烦,因为它的行为不正确,当我放大或缩小它。它停止绘制,然后在错误的位置显示一段时间。在窗口的左上角。而且画线不正确。 下面是(
onLeftDown
)功能(应该绘制的按钮)的代码。右键事件(放大)。希望它足够清楚

你们知道发生了什么事吗?我该怎么解决 提前谢谢

def OnLeftButtonEvent(self, event):
    self.curLine = []
    self.x, self.y = event.GetPositionTuple()
    self.CaptureMouse()

def OnMotion(self, event):
    if self.HasCapture() and event.Dragging():
      dc = wx.BufferedDC(None,self.buffer)
      dc.SetUserScale(self.scale,self.scale)
      # to zoom in and out ( increases whenever someone presses the right mouse button
      dc.BeginDrawing()
      dc.SetPen(wx.Pen(wx.BLUE, 3))
      coords = (self.x, self.y) + event.GetPositionTuple()
      self.curLine.append(coords)
      dc.DrawLine(*coords)
      self.x, self.y = event.GetPositionTuple()
      self.SetXY(event)
      dc.EndDrawing()

def OnRightDown(self,event):
    print self.scale
    self.scale=self.scale*2.0
    self.initDrawing()
    self.maxHeight=self.maxHeight*2
    self.maxWidth=self.maxWidth*2

您需要缩放鼠标坐标,以便它与图形的缩放同步,因此,如果您使用的是userScale=2,则x=10处的鼠标将以20处结束。 所以你需要这样做

sx, sy = x/cur_scale, y/cur_scale

您还需要在
EVT_PAINT
事件中绘制,而不是在运动中,在运动中您只需要刷新窗口和绘制事件就可以了。如果您发布的原始代码是您的实际代码,那么您遇到的一个问题是前导空格的使用不一致。在OnRightDown中,self.initDrawing()使用与上一行和下一行代码不同的缩进。也许这就是你的问题?不,那不是问题。没有缩进错误,但此网页上的缩进丢失。不知道如何在这里修复它。
self.hascapt()和event.Dragging():
这条线应该是什么意思?顺便说一句,你不需要开始/结束绘图-它们什么都不做。(哇,这应该是给Moayyad的)事实上,画图还可以(他正在复制wx演示代码)-EVT_画图只是简单地在运动事件中绘制位图缓冲区。这是我的绘图程序的绘制事件中的代码:wx.BufferedPaintDC(self,self.buffer,wx.buffer\u VIRTUAL\u AREA),但仍然。。这并不能回答我的问题,绘图很好,但使用dc.SetUserScale()时就不行了。你试过了吗?或者有人有其他方法来缩放图像吗