如何使用Ruby / Tk验证TkEntry的内容?

时间:2019-10-28 03:42:37

标签: ruby tk

我想拥有一个仅接受数字值的TkEntry,但我不知道该怎么做。 :validatecommand仅在初始化TkEntry时被调用一次,我不知道如何正确传递参数!

这是一个说明我的问题的示例文件:

require 'tk'

# validation method
def isNumerical?
    return false # i plan to actually do something here once i can get a variable in
end

def initWindow
    @root = TkRoot.new { 
        title "Bluebird"
        minsize 400, 300
        setgrid
    }

    entry = TkEntry.new(
        @root,
        :width=>5,
        :textvariable=>TkVariable.new("2241"),
        :validate=>"key",
        :validatecommand=>proc{isNumerical?}
    ).grid(:column=> 0, :row=> 0)
end

initWindow
Tk.mainloop

1 个答案:

答案 0 :(得分:0)

  

当初始化TkEntry [。]时,:validate命令仅被调用一次。

不是!

  

我不知道如何在[。]中正确传递参数。

我最小化了您的程序,以便将参数传递给其验证方法并打印输入字符串:

require 'tk'

# validation method
def isNumerical?(s)
    puts s
#   return false # i plan to actually do something here once i can get a variable in
    return true
end

def initWindow
    @root = TkRoot.new { 
        title "Bluebird"
        minsize 400, 300
        setgrid
    }

    entry = TkEntry.new(
        @root,
        :width=>5,
        :textvariable=>TkVariable.new("2241"),
        :validate=>"key",
        :validatecommand=>[proc{|s| isNumerical?(s)}, "%P"]
    ).grid(:column=> 0, :row=> 0)
end

initWindow
Tk.mainloop

顺便说一句,我认为您会发现这些有用:

  1. Tcl documentation of ttk_entry;和
  2. Ruby Tk sample code