проблема при масштабировании картинок в wxpython - PullRequest
1 голос
/ 11 января 2010

Мне нужно нарисовать изображение (прокомментировать) на прокручиваемой панели. У меня проблемы с этим, так как он ведет себя неправильно, когда я увеличиваю или уменьшаю его. он перестает рисовать, а затем показывает это через некоторое время в неправильном месте. прямо в верхнем левом углу окна. и не рисует линии правильно. ниже приведен код функции (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 Ответ

3 голосов
/ 11 января 2010

Вам необходимо масштабировать координаты мыши так, чтобы они синхронизировались с масштабированием чертежа, поэтому, если вы используете userScale = 2, мышь при x = 10 в конечном итоге будет равна 20. так что вам нужно сделать это

sx, sy = x/cur_scale, y/cur_scale

Вы также должны рисовать в событии EVT_PAINT, а не в движении, при движении вам просто нужно обновить окно, а событие рисования должно позаботиться о том, что вы хотите нарисовать.

...