我在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)
如何绑定鼠标左键来更新状态栏,还让我点击光标?
答案 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)
发生了什么
您正在调用此函数而不将事件作为参数。