wxpython中textctrl文本框控件常用的触发事件为“enter键入事件”,当键盘按下“enter”按钮时textctrl文本框被触发执行相应的动作。
wx.TextCtrl控件学习链接:https://docs.wxpython.org/wx.TextCtrl.html?highlight=textctrl#phoenix-title-event-handling
从上面截图的触发事件可以看出“enter键入事件”设置的触发事件为EVT_TEXT_ENTER,这个要求textctrl的style必须是wx.TE_PROCESS_ENTER。
否则会报错如下:
wx._core.wxAssertionError: C++ assertion ““HasFlag(0x0400)”” failed at …\src\common\textcmn.cpp(1210) in wxTextCtrlBase::OnDynamicBind(): Must have wxTE_PROCESS_ENTER for wxEVT_TEXT_ENTER to work
可以直接修改代码textctrl控件的style属性,如果是wxFormBuilder工具搭建的界面可以直接修改textctrl控件的style属性生成相应的代码。
(1)直接修改程序代码
通过textctrl控件的方法定义可以看出,style属性是紧跟在size属性后面的,只要找到textctrl定义中的size后面的一定为style属性。
self.m_textCtrl25 = wx.TextCtrl(sbSizer3.GetStaticBox(), wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(600, -1), wx.TE_PROCESS_ENTER)
# 设置文本框的enter事件,不点击查询按钮直接按enter就可以实现搜索功能
self.m_textCtrl25.Bind(wx.EVT_TEXT_ENTER, self.search_id_info)
(2)通过wxFormBuilder设置textctrl的style属性
textctrl不设置style,默认style位置上取0:
self.m_textCtrl25 = wx.TextCtrl( sbSizer3.GetStaticBox(), wx.ID_ANY, wx.EmptyString, wx.Point( -1,-1 ), wx.Size( 500,-1 ), 0 )
textctrl的style选择wxTE_PROCESS_ENTER,style变成wx.TE_PROCESS_ENTER:
self.m_textCtrl25 = wx.TextCtrl( sbSizer3.GetStaticBox(), wx.ID_ANY, wx.EmptyString, wx.Point( -1,-1 ), wx.Size( 500,-1 ), wx.TE_PROCESS_ENTER )