你的代码有一点小问题,导致画线的位置不正确。下面是修改后的代码:
import wx
class winMainForm(wx.Frame):
def __init__(self,parent,title):
wx.Frame.__init__(self, parent, title=title, size=(800,600))
self.panel = wx.Panel(self)
self.panel.Bind(wx.EVT_MOTION, self.OnMove)
self.panel.Bind(wx.EVT_PAINT, self.OnPaint)
self.line_pos = (-1,-1)
self.Show()
def OnMove(self, event):
x,y = event.GetPosition()
print('x坐标:{x},y坐标:{y}'.format(x=x, y=y))
self.line_pos = (x,y)
self.Refresh()
self.SetTitle('靶向定位: x坐标({x}),y坐标({y})'.format(x=x,y=y))
event.Skip()
def OnPaint(self, event):
dc = wx.PaintDC(self.panel)
pen = wx.Pen(wx.Colour(0,0,255))
dc.SetPen(pen)
# 画水平线
dc.DrawLine(self.line_pos[0] - 50, self.line_pos[1], self.line_pos[0] + 50, self.line_pos[1])
# 画垂直线
dc.DrawLine(self.line_pos[0], self.line_pos[1] - 50, self.line_pos[0], self.line_pos[1] + 50)
def main():
try:
app = wx.App(False)
winMainForm(None, '鼠标在窗体中的位置')
app.MainLoop()
except Exception as e:
print('程序报错:', e)
if __name__ == '__main__':
main()
在`OnPaint`方法中,我们需要使用正确的坐标来画线。你之前的代码中使用了`self.line_pos`来画线,这是不正确的。我们需要分别使用`self.line_pos[0]`和`self.line_pos[1]`来表示x坐标和y坐标。同时,延伸的距离应该是加减50,而不是使用`+`运算符。
希望这次修改能够解决你的问题!如果还有其他问题,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |