2017-05-26 32 views
0

私はPython 2.7にwxpythonを使用しています。テキストエディタで作業していますが、ステータスバーに問題が発生しました。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

関数の後に通常の処理を行うには、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 Left mouse button down event. The handler of this event should normally call event.Skip() to allow the default processing to take place as otherwise the window under mouse wouldn't get the focus.

編集: あなたのトレースバック:

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,e) に何が起こったのかself.UpdateLineCol(self)を指定します。

+0

私はこれを試してみましたが、それは私にエラーました: フレーム=メインウィンドウ(なし、 'Avix') ファイル」で、 ファイル "editor.py"、行211: 'トレースバック(最新の呼び出しの最後に) UpdateLineColで」__init__ self.UpdateLineColでは、ライン103、(自己) ファイル "editor.py editor.py"、ライン208、 e.Skip() はAttributeError: 'メインウィンドウ' オブジェクトが属性を持っていない 'スキップ' ' – Trifex

+0

すべてのイベントが' Skip'という属性を持っていることを知っている限り、 'Bind'コマンドだけでなく、別の方法で' UpdateLineCol'を呼び出していると仮定できます。 –

+0

私は 'self。コントロールエディタの起動時に.Bind(wx.EVT_KEY_UP、self.UpdateLineCol) 'と' self.UpdateLineCol(self) 'を使って更新します。どうやってスキップ作業をすることができますか?すべてのコードは私のGitHubリポジトリにあります。[こちら](https://github.com/thatpotato/Avix-Editor) – Trifex

関連する問題