捕获 WxPython 样式文本控件的回车键
Posted
技术标签:
【中文标题】捕获 WxPython 样式文本控件的回车键【英文标题】:Capturing enter key for WxPython Styled Text Control 【发布时间】:2013-03-17 11:38:13 【问题描述】:通过导入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 函数来捕获事件?
【问题讨论】:
【参考方案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()
【讨论】:
这对我不起作用,您必须编写 wx.EVT_KEY_DOWN 和 wx.stc.STC_KEY_RETURN 才能使此代码起作用。【参考方案2】:这实际上在文档中进行了解释: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)
【讨论】:
【参考方案3】:我认为您应该使用 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
是代表向下箭头键的代码,而不是表示已按下的键。)
【讨论】:
【参考方案4】:你可以使用wx.EVT_KEY_DOWN
,回车键是13
【讨论】:
以上是关于捕获 WxPython 样式文本控件的回车键的主要内容,如果未能解决你的问题,请参考以下文章
MFC对话框的CEdit控件回车换Tab键,并获得焦点全选中文本