【问题标题】:problem when zooming pictures in wxpython在 wxpython 中缩放图片时的问题
【发布时间】:2011-01-03 17:27:20
【问题描述】:

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

【问题讨论】:

  • 如果您发布的原始代码是您的实际代码,那么您遇到的一个问题是前导空格的使用不一致。在 OnRightDown 中,self.initDrawing() 使用与上一行和下一行代码不同的缩进。也许这是你的问题?
  • 不,这不是问题。没有缩进错误,但是这个网页上的缩进被错过了。不知道如何在这里修复它。
  • self.HasCapture() and event.Dragging(): 这行应该是什么意思?

标签: python image wxpython drawing zooming


【解决方案1】:

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

sx, sy = x/cur_scale, y/cur_scale

您还需要在 EVT_PAINT 事件中进行绘图,而不是在 onmotion 上,在运动时您只需要刷新窗口,并且绘图事件应该处理您想要绘制的内容。

【讨论】:

  • 顺便说一句,你不需要开始/结束绘图 - 他们什么都不做。 (哎呀,那应该是给摩耶的)
  • 实际上,绘图没问题(他正在复制 wx 演示代码)- EVT_PAINT 只是在运动事件中对正在绘制的位图缓冲区进行 blits。这是我的绘图程序绘制事件中的代码:wx.BufferedPaintDC(self, self.buffer, wx.BUFFER_VIRTUAL_AREA)
  • 但仍然..这不能回答我的问题,绘图很好,但当您使用 dc.SetUserScale() 时就不行了。你试过了吗?或者有人有其他方法来缩放图像
猜你喜欢
  • 2011-08-04
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 2011-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多