Seite 1 von 1

2 Maus-Events gleichzeitig registrieren

Verfasst: Freitag 21. Mai 2010, 11:13
von calo
Hallo,

eine Frage bzgl. den EVENTs: EVT_MOTION und EVT_LEFT_DOWN:
Ich möchte gern erreichen, dass im Statusbar die Koordinaten der Maus immer dann aktualisiert werden, wenn ich die linke Maustaste drücke und gleichzeitig die Maus bewege. Vielleicht kann mir einer einen Tipp geben?

Code: Alles auswählen

import wx
import wx.lib.plot as plot

class MyFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, id=-1, size=(410, 340))
        self.statusbar = self.CreateStatusBar()

        self.client = plot.PlotCanvas(self)
        self.client.SetInitialSize(size=(400, 300))
        self.client.SetEnableGrid(True)


class MyApp(wx.App):
    def __init__(self):
        wx.App.__init__(self, True)

    def OnInit(self):
        self.frame = MyFrame()
        self.frame.Show(True)

        data = [(1,2), (2,3), (3,5), (4,6), (5,8), (6,8), (12,10), (13,4)]
        line = plot.PolyLine(data, colour='red', width=1)
        marker = plot.PolyMarker(data, marker='triangle')
        gc = plot.PlotGraphics([line, marker], 'Graph', 'x', 'y')
        self.frame.client.Draw(gc, xAxis=(0,15), yAxis=(0,15))

        self.frame.client.canvas.Bind(wx.EVT_LEFT_DOWN, self.OnMovePoint)
        # self.frame.client.canvas.Bind(wx.EVT_MOTION, self.OnMovePoint)
        return True

    def OnMovePoint(self, evt):
        s = "%.2f, %.2f" % self.frame.client._getXY(evt)
        self.frame.statusbar.SetStatusText(s)
        evt.Skip()


if __name__ == "__main__":
    app = MyApp()
    app.MainLoop()

Vielen Dank, calo

Re: 2 Maus-Events gleichzeitig registrieren

Verfasst: Freitag 21. Mai 2010, 13:25
von midan23
Hallo,

ich würde es folgendermassen versuchen:
  • * Definieren eine Variable in deiner Klasse mit dem Anfangswert False
    * Sobald die linke Maustaste gedrückt wird, setze die Variable auf True
    * Sobald die linke Maustaste losgelassen wird, setze die Variable auf False
    * Die Koordinaten in der Statuszeile werden nur dann aktualisiert, wenn besagte Variable den Wert True hat

Re: 2 Maus-Events gleichzeitig registrieren

Verfasst: Freitag 21. Mai 2010, 13:45
von calo
Hi,

:D Super. Vielen Dank ... es funktioniert.

Code: Alles auswählen

import wx
import wx.lib.plot as plot

class MyFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, id=-1, size=(410, 340))
        self.statusbar = self.CreateStatusBar()

        self.client = plot.PlotCanvas(self)
        self.client.SetInitialSize(size=(400, 300))
        self.client.SetEnableGrid(True)


class MyApp(wx.App):
    def __init__(self):
        wx.App.__init__(self, True)

    def OnInit(self):
        self.frame = MyFrame()
        self.frame.Show(True)

        data = [(1,2), (2,3), (3,5), (4,6), (5,8), (6,8), (12,10), (13,4)]
        line = plot.PolyLine(data, colour='red', width=1)
        marker = plot.PolyMarker(data, marker='triangle')
        gc = plot.PlotGraphics([line, marker], 'Graph', 'x', 'y')
        self.frame.client.Draw(gc, xAxis=(0,15), yAxis=(0,15))
        self._LeftDown = False

        self.frame.client.canvas.Bind(wx.EVT_MOTION, self.OnMovePoint)
        self.frame.client.canvas.Bind(wx.EVT_LEFT_DOWN, self.OnMouseLeftDown)
        self.frame.client.canvas.Bind(wx.EVT_LEFT_UP, self.OnMouseLeftUp)
        return True

    def OnMovePoint(self, evt):
        if self._LeftDown:
            s = "%.2f, %.2f" % self.frame.client._getXY(evt)
            self.frame.statusbar.SetStatusText(s)
        evt.Skip()

    def OnMouseLeftDown(self, evt):
        self._LeftDown = True

    def OnMouseLeftUp(self, evt):
        self._LeftDown = False


if __name__ == "__main__":
    app = MyApp()
    app.MainLoop()