wxpython-用拖动的鼠标画一条线

问题描述 投票:0回答:1

正如标题已经说过的,我试图画一条由2个鼠标事件定义的线。该行的起点应为onClick(),因此当单击鼠标左键时,该行的终点应为onRelease()。我的基本想法是,我将调用两个事件:一个是单击鼠标左键时发生的事件,另一个是释放鼠标左键时发生的事件。这应该模拟鼠标的“拖动”。我为每个事件保存了坐标,在发生2个事件之后,我想在已保存的坐标之间画一条线。那至少是我的基本思想...请注意:我是wxpython的新手,并且缺乏我现在想解决的面向对象的知识。

我在下面的代码中收到以下错误:

Traceback (most recent call last):
  File "wxPaintingTest.py", line 49, in <module>
    frame = MyFrame()
  File "wxPaintingTest.py", line 20, in __init__
    self.paint(self.onClick.posx1, self.posy1, self.posx2, self.posy2)
AttributeError: 'function' object has no attribute 'posx1'

代码:

import wx

class MyFrame(wx.Frame):

    def __init__(self):
        wx.Frame.__init__(self, None, -1, 'draw line', (500, 500))
        panel = wx.Panel(self, -1)
        panel.Bind(wx.EVT_LEFT_DOWN, self.onClick)
        panel.Bind(wx.EVT_LEFT_UP, self.onRelease)
        wx.StaticText(panel, -1, "Pos:", pos=(10, 12))
        self.posClick = wx.TextCtrl(panel, -1, "", pos=(40, 10))
        self.posRelease = wx.TextCtrl(panel, -1, "", pos=(40, 10))
        self.paint(self.onClick.posx1, self.onClick.posy1,
                   self.onRelease.posx2, self.onRelease.posy2)

    def onClick(self, event):
        pos = event.GetPosition()
        self.posx1 = pos.x
        self.posy1 = pos.y
        self.posClick.SetValue("%s, %s" % (pos.x, pos.y))

    def onRelease(self, event):
        pos = event.GetPosition()
        self.posx2 = pos.x
        self.posy2 = pos.y
        self.posRelease.SetValue("%s, %s" % (pos.x, pos.y))

    def paint(self, pos1, pos2, pos3, pos4):
        dc = wx.PaintDC(self.panel)
        dc.SetPen(wx.Pen('blue', 4))
        dc.DrawLine(pos1, pos2, pos3, pos4)

if __name__ == '__main__':
    app = wx.App()
    frame = MyFrame()
    frame.Show(True)
    app.MainLoop()

为什么说该函数没有属性?我就是不明白。

((有人可以说出我的基本蓝图是否可行,还是已经采用了错误的方法?)

最诚挚的问候

python events wxpython line draw
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.