/ Published in: Python
Minimal mvc sample code with python + wx
Expand |
Embed | Plain Text
#!/usr/bin/env python import wx from math import sqrt class Model: def __init__(self, callback): self._path = 0 self._x = None self._y = None self._notify = callback def updatePos(self, x,y): if self._x is not None: self._path += sqrt( (x - self._x)**2 + (y - self._y)**2 ) self._x = x self._y = y self._notify() def path(self): return self._path class View(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, title="Main View") sizer = wx.BoxSizer(wx.VERTICAL) self._mousePath = wx.TextCtrl(self) sizer.Add(wx.StaticText(self, label="Mouse Path"), 0, wx.EXPAND | wx.ALL) sizer.Add(self._mousePath, 0, wx.EXPAND | wx.ALL) self.SetSizer(sizer) def setPath(self, path): self._mousePath.SetValue(str(path)) class Controller: def __init__(self): self._model = Model(self._onUpdate) self._view = View() self._view.setPath(self._model.path()) self._view.Bind(wx.EVT_MOTION, self.onMouseMotion) self._view.Show() def _onUpdate(self): self._view.setPath(self._model.path()) def onMouseMotion(self, evt): self._model.updatePos(evt.GetX(), evt.GetY()) if __name__ == "__main__": app = wx.App(False) controller = Controller() app.MainLoop()
You need to login to post a comment.
