wxpython文本编辑器状态栏更新

时间:2017-05-26 00:31:01

标签: python python-2.7 wxpython

我在Python 2.7中使用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)

如何绑定鼠标左键来更新状态栏,还让我点击光标?

1 个答案:

答案 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鼠标左键按下事件。此事件的处理程序通常应调用event.Skip()以允许进行默认处理,否则鼠标下的窗口将无法获得焦点。

编辑: 你的追溯:

  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)发生了什么 您正在调用此函数而不将事件作为参数。