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

这实际上在文档中进行了解释: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 回答
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 回答
0

你可以使用wx.EVT_KEY_DOWN, Return 键是 13

于 2013-08-08T10:20:19.677 回答
0

我相信您应该使用 StyledTextCtrl 事件来处理 StyledTextCtrl 中的事件,而不是 wx 事件。

最明显要处理的事件似乎是EVT_STC_KEY. 但是,根据event 的文档,这可能不起作用:

闪烁文档说:

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是一个代表向下箭头键的代码,而不是一个键被按下。)

于 2013-03-17T14:12:53.750 回答