捕获WxPython样式文本控件的回车键
在wxpython中使用StyledTextControl,通过导入wx.stc
,我该如何捕捉回车键的事件呢?我试过几种方法,但都出现错误或者根本不管用。
到目前为止,我写了:
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 个回答
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()
1
你可以使用 wx.EVT_KEY_DOWN
,而回车键的编号是13。
0
我认为在处理StyledTextCtrl的事件时,应该使用StyledTextCtrl的事件,而不是wx事件。
最明显的事件似乎是EVT_STC_KEY
。不过,根据这个事件的文档,这可能并不好用:
Scintilla的文档说:
报告所有按下的键。因为在GTK+上有一些键盘焦点的问题,所以使用这个事件。Windows版本不会发送这个事件。
根据作者的理解,这意味着虽然在wxWindows中技术上可以使用这个事件,但实际上它是不会发生的。
你可以尝试处理EVT_STC_CHARADDED
事件,但这个事件似乎是在添加新行后才会被调用。对于这个事件,调用event.Skip()
没有任何效果。在Windows上,这个事件会触发两次,一次是回车\r
,一次是换行\n
。
最终,你想要实现的功能可能是无法做到的。
(顺便提一下,STC_KEY_DOWN
是表示向下箭头键的代码,而不是表示某个键被按下。)