使用有限输入创建条目扩展

时间:2018-03-30 23:51:15

标签: python class validation tkinter widget

为了创建一个输入有限(3或4个字符)的Python Entry小部件,我发现this

对验证一无所知,我的问题是:该教程中最大长度的'子类'可以用作自己的类,引用条目小部件作为其父级而不是'ValidatingEntry',或者是所有的工作在它上面(验证)必要吗?有没有更短的方法来实现这个目标?

然后我看到this question及其答案:

考虑做那样的事情。然后我发现了内置的'setattr'功能。是否可以将其应用于“Entry”类的新实例并使用它来限制字符?

我应该澄清 - 我正在尝试将此限制应用于3个条目小部件 - 两个限制为3个字符,一个限制为4个字符(电话号码)

感谢。

1 个答案:

答案 0 :(得分:0)

关于您在Entry小部件中对长度验证的所述关注。输入长度验证的一个例子。

while {$x1 > $xmin && $x1 < $xmax && $y1 > $ymin && $y1 < $ymax} {
  # For horizontal axis
  while {$x1 > $xmin && $x1 < $xmax} {
    set azi [expr (45+90)]
    set dip 0
    set length  2

    set dist [expr (cos($dip) * $length)]
    set x1 [expr ($x1 + (sin($azimuth) * $dist))]
    set y1 [expr ($y1 + (cos($azimuth) * $dist))]

    set goToVer "y"
    incr Count
  }

  # For vertical axis
  if {$goToVer == "y"} {
    set azi 45
    set dip 0
    set length  5

    set dist [expr (cos($dip) * $length)]
    set x1 [expr ($xVer + (sin($azimuth) * $dist))]
    set y1 [expr ($yVer + (cos($azimuth) * $dist))]

    set xVer $x1
    set yVer $y1

   incr Count
  }
}

建议响应对条目小部件之间焦点切换的评论,更改验证'all' - &gt; 'key',并使用focus_set()

# further reference
# http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/entry-validation.html
import tkinter as tk

root = tk.Tk()

# write the validation command
def _phone_validation(text_size_if_change_allowed):
    if len(text_size_if_change_allowed)<4:
        return True 
    return False

# register a validation command
valid_phone_number = root.register(_phone_validation)

# reference the validation command
entry = tk.Entry(validate='all',
                 validatecommand=(valid_phone_number,'%P' ))
entry.pack()
root.mainloop()