通过导入wx.stc
在wxpython中使用StyledTextControl,如何将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函数来捕获事件?
答案 0 :(得分:2)
嗨,我知道现在有点老了,但我用过它,似乎有效。
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 :(得分:0)
我相信你应该使用StyledTextCtrl事件来处理StyledTextCtrl中的事件,而不是wx事件。
最明显的事件似乎是EVT_STC_KEY
。但是,根据documentation for the event,这可能不起作用:
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上,此事件会触发两次,一次用于回车\r
,一次用于换行\n
。
最终,你想要实现的目标可能是不可能的。
(顺便提一下,STC_KEY_DOWN
是代表向下箭头键的代码,而不是按下键的代码。)
答案 2 :(得分:0)
您可以使用wx.EVT_KEY_DOWN
,返回键为13
答案 3 :(得分:0)
实际上在文档中解释了这一点: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)