在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()时就不行了。你试过了吗?或者有人有其他方法来缩放图像吗