2017-05-26 36 views
0

我爲Python 2.7使用wxpython。我正在使用文本編輯器,但遇到了狀態欄的問題。wxpython文本編輯器狀態欄更新

我想讓我的狀態欄有Line xx, Column xx。但是,我只找到一種方法來使用按鍵進行更新,以供用戶輸入時使用。我還希望用戶能夠在文本編輯器中點擊並查看其光標位置。我試過self.control.Bind(wx.EVT_LEFT_DOWN, self.UpdateLineCol)。當我運行這個,它似乎有反彈鼠標左鍵,所以我不能點擊。

我UpdateLineCol代碼如下:

def UpdateLineCol(self, e): 
    line = self.control.GetCurrentLine() + 1 
    col = self.control.GetColumn(self.control.GetCurrentPos()) 
    stat = 'Line %s, Column %s' % (line, col) 
    self.StatusBar.SetStatusText(stat, 0) 

我如何可以將綁定在鼠標左鍵來更新狀態欄,但也讓我點擊周圍的光標?

回答

0

您需要調用event.Skip()以允許在您的函數之後發生正常處理。

def UpdateLineCol(self, e): 
    line = self.control.GetCurrentLine() + 1 
    col = self.control.GetColumn(self.control.GetCurrentPos()) 
    stat = 'Line %s, Column %s' % (line, col) 
    self.StatusBar.SetStatusText(stat, 0) 
    e.Skip() 

參見:https://wxpython.org/docs/api/wx.MouseEvent-class.html

EVT_LEFT_DOWN Left mouse button down event. The handler of this event should normally call event.Skip() to allow the default processing to take place as otherwise the window under mouse wouldn't get the focus.

編輯: 你回溯:

File "editor.py", line 211, in <module> 
    frame = MainWindow(None, 'Avix') 
    File "editor.py", line 103, in __init__ 
    self.UpdateLineCol(self) 
    File "editor.py", line 208, in UpdateLineCol 
    e.Skip() 
    AttributeError: 'MainWindow' object has no attribute 'Skip' 

指定self.UpdateLineCol(self)發生了什麼事self.UpdateLineCol(self,e) 你沒有事件作爲參數調用這個函數。

+0

我嘗試這樣做,它給了我一個錯誤: '回溯(最近通話最後一個): 文件 「editor.py」,線路211,在 幀=主窗口(無, 'Avix') 文件「 editor.py」,線103,在__init__ self.UpdateLineCol(個體) 文件 「editor.py」,線路208,在UpdateLineCol e.Skip() AttributeError的: '主窗口' 對象沒有屬性 '跳過' ' – Trifex

+0

據我所知,所有事件都具有「跳過」屬性,我只能假設你以另一種方式調用'UpdateLineCol',而不僅僅是用'Bind'命令 –

+0

我也在用'self來調用它。控制。綁定(wx.EVT_KEY_UP,self.UpdateLineCol)'和'self.UpdateLineCol(self)'在編輯器啓動時更新它。我怎樣才能跳過工作?所有的代碼都在我的GitHub倉庫中[這裏](https://github.com/thatpotato/Avix-Editor) – Trifex