原始程式碼及圖例
本篇說明如何顯示滑鼠在Panel上移動時的位置, 代碼及執行結果如下
import wx class MainFrame(wx.Frame): def __init__(self, parent=None): wx.Frame.__init__(self, parent) self.Show() panel=wx.Panel(self) panel.SetBackgroundColour("yellow") wx.StaticText(panel,-1,"Mouse", pos=(50,23)) self.txt=wx.TextCtrl(panel, -1,"", pos=(100,20)) panel.Bind(wx.EVT_MOTION, self.OnMouseMove) sizer=wx.BoxSizer(wx.VERTICAL) self.SetSizer(sizer) sizer.Add(panel, 1, wx.EXPAND) self.Layout() def OnMouseMove(self, event): pos=event.GetPosition() self.txt.SetLabelText("%s, %s" % (pos.x, pos.y)) app=wx.App() frame=MainFrame() app.MainLoop()
整体視窗
整個視窗類別繼承wx.Frame. 在主程式中產生wx.App, MainFrame, 然後進入MainLoop.
視窗中, 使用Panel包含一個wx.staticText(標籤), 及wxTextCtrl(文字方塊). 滑鼠的座標位置可以顯示在wx.TextCtrl之中.
在此採用了正統的方式, 利用BoxSizer管理Panel的大小, 最後調用wx.Frame的Layout()重新佈署一次, 整個畫面才會更新正確
事件綁定
Panel需綁定wx.EVT_MOTION事件, 當偵測到滑鼠移動時, 就會執行OnMouseMove的方法
panel.Bind(wx.EVT_MOTION, self.OnMouseMove)
取得位置
在OnMouseMove方法中, 借由event.GetPosition方法取得 pos 物件, 再由pos.x, pos.y取得座標. 然後置於TextCtrl方塊內