【问题标题】:wxPython: Put wx.TE_PROCESS_ENTER on Masked TextCtrlwxPython:将 wx.TE_PROCESS_ENTER 放在 Masked TextCtrl 上
【发布时间】:2012-08-21 03:28:37
【问题描述】:

在谷歌上搜索,我发现在蒙面的TextCtrl上使用wx.TE_PROCESS_ENTER是不可能的,我自己尝试设置style=wx.TE_PROCESS_ENTER然后将它与wx.EVT_TEXT_ENTER绑定,但没有任何反应。我试图做的是制作许多蒙面的 TextCtrl 以便用户可以输入一些值,然后当按下 Enter 按钮时调用一个函数来对其进行计算。

提前致谢

【问题讨论】:

    标签: wxpython textctrl


    【解决方案1】:

    我不确定为什么会吃掉那个事件,但你可以通过绑定到 EVT_KEY_DOWN 来模拟同样的事情。这是一个例子:

    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()
    

    【讨论】:

    • 它工作得非常好,所以基本上使用EVT_KEY_DOWN 会捕获我们在键盘上按下的所有内容,对吧?感谢您的解决方案
    • 是的,差不多。有时您需要使用添加的 wx.WANTS_CHARS 样式,但总体而言,EVT_KEY_DOWN 是可行的方法。或 EVT_CHAR。请参阅blog.pythonlibrary.org/2009/08/29/… 了解更多信息。
    【解决方案2】:

    按照这个例子,我能够让它工作

    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.''') 
    

    本网站还说明,如果没有设置样式为 wx.TE_PROCESS_ENTER,则不能使用 EVT_TEXT_ENTER

    https://wxpython.org/Phoenix/docs/html/wx.TextCtrl.html

    【讨论】:

      猜你喜欢
      • 2011-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-31
      • 1970-01-01
      • 2011-10-28
      • 1970-01-01
      相关资源
      最近更新 更多