Как проверить содержимое TkEntry с помощью Ruby / Tk? - PullRequest
0 голосов
/ 28 октября 2019

Я хочу иметь 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 голосов
/ 07 ноября 2019

Команда: validate вызывается только один раз, когда инициализируется TkEntry [.]

Не так!

Не могу понятькак правильно передать аргумент в [.]

Я минимально подправил вашу программу, чтобы передать аргумент ее методу валидации и напечатать строку ввода:

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 документация ttk_entry
  2. код образца Ruby Tk .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...