在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()
內容複製到該功能。