2012-04-28 28 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