1

インポートしてwxpythonでStyledTextControlを使用するとwx.stc、Enterキーをイベントとしてキャプチャするにはどうすればよいですか?私はいくつかの方法を試しましたが、すべてがエラーを言っているか、まったく機能していないようです。

とても公正なアイブが得た:

self.text.Bind(wx.stc.STC_KEY_DOWN, self.hw)

def hw(self, event):
  if event.GetKeyCode == wx.stc.STC_KEY_RETURN:
    self.text.AddText('Hello World')
    event.Skip()

self.text私のstcはどこにありますか。

私のために働いていないようです。イベントをキャプチャするためにwx関数またはstc関数を使用しますか?

4

4 に答える 4

1

こんにちは私はこれが少し古いことを知っていますが、私はこれを使用しました、そしてそれはうまくいくようです。

import wx
import wx.stc

self.m_message = TextCtrl( self, ID_ANY, EmptyString, DefaultPosition, Size( 200,100 ), 0 )
self.m_message.Bind(EVT_KEY_DOWN, self.DoKeyPress)

def DoKeyPress(self, event):
    if event.GetKeyCode() == STC_KEY_RETURN:
        self.DoSendTextMessage(event)
    else:
        event.Skip()
于 2016-06-04T14:10:21.433 に答える
1

これは実際にはドキュメントで説明されています:https ://wxpython.org/Phoenix/docs/html/wx.TextCtrl.html 。スタイルをTE_PROCESS_ENTERに設定すると、イベントが有効になり、バインドするだけで済みます。

from wx import TextCtrl, EVT_TEXT_ENTER, TE_PROCESS_ENTER
text_input = TextCtrl(parent, style=TE_PROCESS_ENTER)
text_input.Bind(EVT_TEXT_ENTER, callback)
于 2018-04-18T07:46:01.097 に答える
0

StyledTextCtrlのイベントを処理するには、wxイベントではなく、StyledTextCtrlイベントを使用する必要があると思います。

処理する最も明白なイベントはであるように思われますEVT_STC_KEYただし、イベントのドキュメントによると、これは機能しない可能性があります。

Scintillaのドキュメントには次のように書かれています。

Reports all keys pressed. Used on GTK+ because of some problems with keyboard focus. Not sent by Windows version.

このライターが知る限り、これは、このイベントがwxWindowsを通じて技術的に利用可能であっても、実際には発生しないことを意味します。

代わりにイベントの処理を試すことができますがEVT_STC_CHARADDED、新しい行が追加された後に呼び出されるようです。event.Skip()このイベントを呼び出しても効果はありません。Windowsでは、このイベントは2回発生します。1回はキャリッジリターンの場合\r、もう1回は改行の場合\nです。

最終的には、達成しようとしていることが不可能になる可能性があります。

(ちなみに、 STC_KEY_DOWNこれは下矢印キーを表すコードであり、キーが押されたことを表すものではありません。)

于 2013-03-17T14:12:53.750 に答える
0

を使用できwx.EVT_KEY_DOWN、Returnキーは13です。

于 2013-08-08T10:20:19.677 に答える