2012-04-28 40 views
1

當TextCtrl/Styled TextCtrl中的插入符號的位置已更改時,會調用哪個事件?我需要綁定事件以在狀態欄中顯示插入符的當前位置。wxPython插入符號移動事件

+0

試過wx.stc.EVT_STC_CHANGE,好,當我改變的內容,但當我只是簡單地移動插入符號時沒有用處。 – 2012-04-28 16:10:34

回答

2

嘗試使用wx.TextCtrl對象像這樣綁定wx.EVT_KEY_UP事件:

import wx 

class MyForm(wx.Frame): 

    def __init__(self): 
     wx.Frame.__init__(self, None, wx.ID_ANY, "Show Caret Position", size=(400, 140)) 
     panel = wx.Panel(self, wx.ID_ANY) 
     sizer = wx.BoxSizer(wx.VERTICAL) 
     text = wx.StaticText(panel, -1, "Text:", (10, 22)) 
     self.textCtrl = wx.TextCtrl(
       panel, 
       -1, "", 
       (50,5), 
       size=(250, 50), 
       style=wx.TE_MULTILINE 
      ) 
     self.textCtrl.SetInsertionPoint(0) 
     self.textCtrl.Bind(wx.EVT_KEY_UP,self.onTextKeyEvent) 
     self.textCtrl.Bind(wx.EVT_LEFT_UP,self.onTextKeyEvent) 
     self.statusbar = self.CreateStatusBar(1) 
     panel.SetSizerAndFit(sizer, wx.VERTICAL) 

    def onTextKeyEvent(self, event): 
     statusText = "Caret Position: "+str(self.textCtrl.GetInsertionPoint()) 
     self.SetStatusText(statusText,0) 
     event.Skip() 


#Run application 
if __name__ == "__main__": 
    app = wx.PySimpleApp() 
    frame = MyForm() 
    frame.Show() 
    app.MainLoop() 

我對Windows 7環境Python 2.7 + wxPython 2.8測試。

Here is how it should look like

+0

是的,它在鍵盤上運行良好,非常感謝。但是當我用鼠標改變插入符號的位置時,它不能正常工作。 – 2012-05-03 13:08:45

+0

喔---我忘了加上'MouseEvent'爲'TextCtrl',只需添加一行'self.textCtrl.Bind(wx.EVT_LEFT_UP,self.onTextKeyEvent)」行'self.textCtrl.Bind(WX後.EVT_KEY_UP,self.onTextKeyEvent)」。它會在點擊鼠標時起作用。 – 2012-05-04 06:40:52

+0

@TendouKishi:我**編輯**代碼。現在看。 – 2012-05-04 06:43:02

0

我不認爲有這樣的事件,但你可以嘗試wx.EVT_SET_CURSOR。或者,您可以捕獲wx.EVT_CHAR或其中一個EVT_KEY_ *事件,並使用TextCtrl的GetInsertionPoint()方法來知道遊標的位置。當您在使用鼠標事件的文本控件中單擊時也可能需要調用該方法。

+0

wx.EVT_SET_CURSOR導致我的指針不能轉換成'I'字母。有沒有其他的方法可以在不阻止鼠標轉換的情況下使用? – 2012-05-03 13:11:14

+0

我可能應該說你可以使用wx.EVT_LEFT_DOWN而不是光標。試試看。 – 2012-05-03 13:33:04

+0

它成功地沒有停止我的鼠標指針的轉換,但它需要雙擊鼠標才能使用鼠標移動... – 2012-05-03 13:40:52

0

爲了知道什麼時候鼠標放在你可以綁定任何wx.EVT_ENTER_WINDOW窗口中(見here