【问题标题】:PythonCard not getting 'enter' KeyEvent in WindowsPythonCard 在 Windows 中没有得到“输入”键事件
【发布时间】:2013-07-28 03:09:12
【问题描述】:

如果这是一个新手问题,我很抱歉,但我正在编写一个 PythonCard 程序,我希望它在我从 TextBox 内按 Enter 键时执行一些操作。我的代码如下:

def on_SampleTextField_keyDown(self, event):
    if event.keyCode == wx.WXK_RETURN:
        doSomething()
    else:
        event.Skip()

这在 Linux 上运行良好,但是当我在 Windows 上运行它时,它就像 Tab 键一样。在网上搜索后,我相信 Windows 将回车键视为导航键,如果我只使用 wxPython,我需要将窗口样式设置为 wx.WANTS_CHARS 。我认为这在 PythonCard 中应该是可能的,因为它只是位于 wxPython 之上,但我不确定。如果是的话,我不知道该怎么做!所以如果有人有任何想法,请告诉我!

【问题讨论】:

    标签: windows wxpython keyevent keycode pythoncard


    【解决方案1】:

    在 wxPython 中,我能够在将 wx.TE_PROCESS_ENTER 添加到 TextCtrl 的样式并按照 here 的描述绑定 wx.EVT_TEXT_ENTER 事件时使用返回键。
    PythonCard 既不定义此事件,也不能手动更改 TextField 的样式,因为此属性是在 __init__() 中设置的。在 wxPython 中对我有用的另一个选项是绑定到 wx.EVT_CHAR_HOOK 事件,它不需要在初始化期间设置特定的样式属性。这就是为什么我使用这种方法来为这个问题想出一个有点老套的解决方案。

    PythonCard 在类结构中定义其事件,如下所示:

    class KeyPressEvent(KeyEvent):    
        name = 'keyPress'
        binding = wx.EVT_CHAR
        id = wx.wxEVT_CHAR
    

    我将此结构用作新自定义事件的模板,因此我的代码现在看起来像这样:

    from PythonCard import model
    from PythonCard.event import KeyEvent
    import PythonCard.components.textfield
    
    import wx
    
    class KeyPressHookEvent(KeyEvent):    
        name = 'keyPressHook'
        binding = wx.EVT_CHAR_HOOK
        id = wx.wxEVT_CHAR_HOOK
    
    # TextFieldEvents is a tuple so type juggling is needed to modify it
    PythonCard.components.textfield.TextFieldEvents = tuple(
            list(PythonCard.components.textfield.TextFieldEvents) + 
            [KeyPressHookEvent])
    

    然后我像往常一样创建我的应用程序并定义处理程序:

    def on_keyPressHook(self, event):
        if event.keyCode == wx.WXK_RETURN:
            self.handle_return()
        else:
            event.Skip()
    

    这样我可以处理handle_return() 中的返回键的按下。这适用于 Windows,但不适用于 Cygwin,因此可能不适用于 linux。至少在 Cygwin 中,应用程序仍然会收到 on_keyDown() 中的返回键,因此您只需将 on_keyPressHook() 的内容复制到该函数即可。

    【讨论】:

      猜你喜欢
      • 2012-09-21
      • 2010-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多