鱼C论坛

 找回密码
 立即注册
查看: 168|回复: 3

[技术交流] wxPython 窗体控件打靶定位

[复制链接]
发表于 2024-5-27 09:40:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
最近刚开始学习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[0],self.line_pos[1],self.line_pos[0]+50,self.line_pos[1])#水平线向右延伸
        dc.DrawLine(self.line_pos[0],self.line_pos[1],self.line_pos[0],self.line_pos[1]+50)#垂直线向下延伸
        dc.DrawLine(self.line_pos[0]-50,self.line_pos[1],self.line_pos[0],self.line_pos[1])#水平线向左延伸
        dc.DrawLine(self.line_pos[0],self.line_pos[1]-50,self.line_pos[0],self.line_pos[1])#垂直线向上延伸

def main():
    try:
        app = wx.App(False)
        winMainForm(None, '鼠标在窗体中的位置')
        app.MainLoop()
    except Exception as e:
        print('程序报错:', e)

if __name__ == '__main__':
    main()
捕获.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-5-27 09:40:21 | 显示全部楼层
你的代码有一点小问题,导致画线的位置不正确。下面是修改后的代码:
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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-27 09:46:24 | 显示全部楼层
受教了,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-27 09:46:29 | 显示全部楼层


不客气!如果还有其他问题,随时来问我。祝你学习wxPython愉快!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 18:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表