我需要在滚动面板中绘制图像(对其进行评论)。我遇到了麻烦,因为当我放大或缩小它时它表现不正常。它停止绘制,然后它在错误的地方显示它一段时间后。就在窗口的左上角。并且不能正确绘制线条。
下面是(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
答案 0 :(得分:3)
您需要缩放鼠标坐标以使其与绘图缩放同步,因此如果您使用userScale = 2,则x = 10处的鼠标将结束于20。 所以你需要这样做
sx, sy = x/cur_scale, y/cur_scale
你还需要在EVT_PAINT
事件中进行绘图而不是onmotion,在运动时你只需要刷新窗口,绘制事件应该照顾你想要绘制的内容。