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

时间:2010-01-11 11:17:03

标签: python image wxpython drawing zoom

我需要在滚动面板中绘制图像(对其进行评论)。我遇到了麻烦,因为当我放大或缩小它时它表现不正常。它停止绘制,然后它在错误的地方显示它一段时间后。就在窗口的左上角。并且不能正确绘制线条。 下面是(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

1 个答案:

答案 0 :(得分:3)

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

sx, sy = x/cur_scale, y/cur_scale

你还需要在EVT_PAINT事件中进行绘图而不是onmotion,在运动时你只需要刷新窗口,绘制事件应该照顾你想要绘制的内容。