【问题标题】:wxpython text editor status bar updatewxpython文本编辑器状态栏更新
【发布时间】:2017-05-26 22:34:48
【问题描述】:

我正在为 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)

如何绑定鼠标左键更新状态栏的同时让我用光标到处点击?

【问题讨论】:

    标签: python python-2.7 wxpython


    【解决方案1】:

    您需要调用 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) 发生了什么 您在没有事件作为参数的情况下调用此函数。

    【讨论】:

    • 我试过这个,它给了我一个错误:Traceback (most recent call last): File "editor.py", line 211, in &lt;module&gt; 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'
    • 据我所知,所有事件都具有Skip 属性,我只能假设您以另一种方式调用UpdateLineCol,而不仅仅是使用Bind 命令
    • 我也用self.control.Bind(wx.EVT_KEY_UP, self.UpdateLineCol)self.UpdateLineCol(self) 调用它,以便在编辑器启动时更新它。我怎样才能让跳过工作?所有代码都在我的 GitHub repo here
    • 为启动定义另一个函数是我想到的最简单的方法。
    • 我该怎么做?我对 wxpython 很陌生。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    相关资源
    最近更新 更多