グーグルで検索するとwx.TE_PROCESS_ENTER
、マスクされたTextCtrlで使用することは不可能であることがわかりました。自分で設定してstyle=wx.TE_PROCESS_ENTER
からバインドしようとしましwx.EVT_TEXT_ENTER
たが、何も起こりません。私がやろうとしていたのは、ユーザーが値を入力できるように多くのマスクされたTextCtrlを作成し、Enterボタンを押すと、その関数を呼び出して計算を実行することです。
前もって感謝します
なぜそれがそのイベントを食べているのかわかりませんが、代わりにEVT_KEY_DOWNにバインドすることで同じことをシミュレートできます。これが1つの例です:
import wx
import wx.lib.masked as masked
########################################################################
class MyPanel(wx.Panel):
""""""
#----------------------------------------------------------------------
def __init__(self, parent):
"""Constructor"""
wx.Panel.__init__(self, parent=parent)
control = ["Phone No", "(###) ###-#### x:###", "", 'F^-', "^\(\d{3}\) \d{3}-\d{4}", '','','']
maskText = masked.TextCtrl(self,
mask = control[1],
excludeChars = control[2],
formatcodes = control[3],
includeChars = "",
validRegex = control[4],
validRange = control[5],
choices = control[6],
choiceRequired = True,
defaultValue = control[7],
demo = True,
name = control[0],
style=wx.TE_PROCESS_ENTER)
maskText.Bind(wx.EVT_KEY_DOWN, self.onEnter)
#----------------------------------------------------------------------
def onEnter(self, event):
""""""
keycode = event.GetKeyCode()
if keycode == wx.WXK_RETURN or keycode == wx.WXK_NUMPAD_ENTER:
print "you pressed ENTER!"
event.Skip()
########################################################################
class MyFrame(wx.Frame):
""""""
#----------------------------------------------------------------------
def __init__(self):
"""Constructor"""
wx.Frame.__init__(self, None, title="Masked!")
panel = MyPanel(self)
self.Show()
if __name__ == "__main__":
app = wx.App(False)
frame = MyFrame()
app.MainLoop()
この例に従って、私はそれを機能させることができました
https://www.programcreek.com/python/example/4695/wx.TE_PROCESS_ENTER
def __init__(self):
wx.Frame.__init__(self, None,
pos=wx.DefaultPosition, size=wx.Size(450, 100),
style=wx.MINIMIZE_BOX | wx.SYSTEM_MENU | wx.CAPTION |
wx.CLOSE_BOX | wx.CLIP_CHILDREN,
title="BRUNO")
panel = wx.Panel(self)
ico = wx.Icon('boy.ico', wx.BITMAP_TYPE_ICO)
self.SetIcon(ico)
my_sizer = wx.BoxSizer(wx.VERTICAL)
lbl = wx.StaticText(panel,
label="Bienvenido Sir. How can I help you?")
my_sizer.Add(lbl, 0, wx.ALL, 5)
self.txt = wx.TextCtrl(panel, style=wx.TE_PROCESS_ENTER,
size=(400, 30))
self.txt.SetFocus()
self.txt.Bind(wx.EVT_TEXT_ENTER, self.OnEnter)
my_sizer.Add(self.txt, 0, wx.ALL, 5)
panel.SetSizer(my_sizer)
self.Show()
speak.Speak('''Welcome back Sir, Broono at your service.''')
このWebサイトでは、スタイルをwx.TE_PROCESS_ENTERに設定していない場合、EVT_TEXT_ENTERを使用できないことも説明されています。