2013-07-28 31 views
0

「ENTER」鍵的KeyEvent對不起,如果這是一個新手的問​​題,但我寫一個程序PythonCard,我想它,當我按下回車鍵從一個TextBox裏面做一些事情。我的代碼如下:PythonCard沒有得到在Windows

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的頂部,但我不知道。如果是這樣,我不知道該怎麼做!所以如果有人有任何想法,請讓我知道!

回答

0

在wxPython我能夠加入wx.TE_PROCESS_ENTER時的TextCtrl的風格,結合了wx.EVT_TEXT_ENTER事件描述here使用返回鍵。
PythonCard既不定義了這個事件,也沒有因爲這個屬性在__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()內容複製到該功能。