【发布时间】:2021-06-26 02:52:39
【问题描述】:
我正在尝试创建一个只接受某些键的 wx.TextCtrl。我创建了一个验证函数,并使用 wx.EVT_CHAR 将我的 TextCtrl 绑定到该函数。该功能运行良好,除非我尝试按重音键(´、`、~、¨、^)。我在验证功能的开头放了一个print(event) 以尝试调试它,但是当我按下其中一个键时没有打印任何内容。事件只是没有被触发。
我也试过wx.EVT_KEY_DOWN,但也没有触发。
self.foo_input = wx.TextCtrl(self, size=(150, -1))
self.foo_input.Bind(wx.EVT_CHAR, lambda event: validation_foo(event, foo_params))
这是验证函数(将验证 foo 视为这样):
import wx
def validate_number_key_press(event,
negative=False,
decimal=False,
scientific_notation=False,
imaginary=False,
decimal_separator='.'):
key_code = event.GetUnicodeKey()
print(event) # for debug
if ord('0') <= key_code <= ord('9'):
event.Skip()
return
if negative and key_code == ord('-'):
event.Skip()
return
if decimal and key_code == ord(decimal_separator):
event.Skip()
return
if scientific_notation and key_code == ord('e'):
event.Skip()
return
if imaginary and key_code == ord('j'):
event.Skip()
return
# Navigation and deletion
if key_code in (wx.WXK_BACK, wx.WXK_DELETE, wx.WXK_NUMPAD_DELETE, wx.WXK_TAB, wx.WXK_NUMPAD_TAB, wx.WXK_LEFT, wx.WXK_RIGHT, wx.WXK_NUMPAD_LEFT, wx.WXK_NUMPAD_RIGHT, wx.WXK_HOME, wx.WXK_NUMPAD_HOME, wx.WXK_END, wx.WXK_NUMPAD_END):
print('Navigation and deletion') # for debug
event.Skip()
return
return
【问题讨论】:
-
您是否使用带有死键的键盘布局,即按下
'和e会导致é? -
@VZ。按
'和e不会产生é。但是,我的键盘选项中有一个“无死键布局”,通过使用它会触发事件。问题是使用这种布局我的键映射错误。~是按]键打印的,这发生在很多其他键上 -
那么您使用哪种键盘布局以及在哪种操作系统/环境下使用?
-
Gnu/Linux Pop_OS 20.10 规则:evdev 模型:pc105 布局:br,us 变体:,键盘映射:br-abnt2
标签: python python-3.x validation wxpython wxwidgets