【问题标题】:Allowing TABs in Char Validator允许在 Char Validator 中使用 TAB
【发布时间】:2016-01-04 16:43:03
【问题描述】:

目前我有一个数据输入屏幕,用户必须使用鼠标在输入字段之间导航。我想添加一个 TAB 工具,以便他们可以在输入字段之间进行 TAB,例如姓→名→出生日期等。输入屏幕使用Validators来防止用户输入废话:-

def OnChar(self, evt):
    key = chr(evt.GetKeyCode())
    if ord(key) in [wx.WXK_BACK, wx.WXK_DELETE]:
        evt.Skip()
    if self.flag  == LETTERS and key not in string.letters:
        return
    if self.flag  == DECIMAL_DIGITS and key not in string.digits:
        return
    if self.flag  == HEX_DIGITS and key not in string.hexdigits:
        return
    if self.flag  == ALPHA_NUMERIC and key not in string.printable:
        return
    evt.Skip()

我已添加:-

style=wx.TAB_TRAVERSAL | wx.DEFAULT_DIALOG_STYLE

到框架。但是,验证器会捕获 TAB。有没有办法解决这个问题?

【问题讨论】:

  • 似乎没有人理解这个问题,也许更好地解释你的目标可能会有所帮助。
  • 修改了第一段以提高清晰度
  • 在你的其他 if 语句之前,if ord(key) == wx.WXK_TAB: return 不做你想做的事吗?
  • 不,TAB 键被忽略。抱歉耽搁了 - 患有 RSV!

标签: python-2.7 validation wxpython


【解决方案1】:

因为您将密钥转换为chr(),所以它无法识别wx.WXK_TAB,请参阅以下内容来证明您的问题:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import wx
class Example(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__(self, parent, wx.ID_ANY, "Tab Key Test",size=(310,120))
        self.Stop_prog = False
        self.top = wx.Panel(self, wx.ID_ANY)
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.text_input = wx.TextCtrl(self.top, wx.ID_ANY, size=(300,25))
        self.sizer.Add(self.text_input)
        self.text_input.Bind(wx.EVT_KEY_DOWN, self.OnKey)
        self.top.Sizer = self.sizer
        self.top.Sizer.Fit(self.top)
        self.Show()

    def OnKey(self,event):
        print "Key Pressed", event.GetKeyCode()
        keycode = event.GetKeyCode()
        try:
            charkey = chr(event.GetKeyCode())
            print "Character Key", charkey
        except:
            print "unable to convert key to a character in the range 256"
        if keycode == wx.WXK_F1: 
            self.Close()
        elif keycode == wx.WXK_TAB:
            print "TAB"
            self.text_input.SetValue("You pressed Tab")
        else:
            event.Skip()

def main():
    ex = wx.App()
    Example(None)
    ex.MainLoop()
if __name__ == '__main__':
    main()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    • 2016-11-03
    • 2010-12-30
    • 1970-01-01
    相关资源
    最近更新 更多