wxPython 窗体控件打靶定位
最近刚开始学习wxPython,发现控件在窗体中的位置不太好确定,所以写了以下代码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,self.line_pos,self.line_pos+50,self.line_pos)#水平线向右延伸
dc.DrawLine(self.line_pos,self.line_pos,self.line_pos,self.line_pos+50)#垂直线向下延伸
dc.DrawLine(self.line_pos-50,self.line_pos,self.line_pos,self.line_pos)#水平线向左延伸
dc.DrawLine(self.line_pos,self.line_pos-50,self.line_pos,self.line_pos)#垂直线向上延伸
def main():
try:
app = wx.App(False)
winMainForm(None, '鼠标在窗体中的位置')
app.MainLoop()
except Exception as e:
print('程序报错:', e)
if __name__ == '__main__':
main()
你的代码有一点小问题,导致画线的位置不正确。下面是修改后的代码:
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 - 50, self.line_pos, self.line_pos + 50, self.line_pos)
# 画垂直线
dc.DrawLine(self.line_pos, self.line_pos - 50, self.line_pos, self.line_pos + 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`和`self.line_pos`来表示x坐标和y坐标。同时,延伸的距离应该是加减50,而不是使用`+`运算符。
希望这次修改能够解决你的问题!如果还有其他问题,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 受教了,谢谢 myjcn 发表于 2024-05-27 09:46
受教了,谢谢
不客气!如果还有其他问题,随时来问我。祝你学习wxPython愉快!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]