Ruby TK如何接收用户的输入?

Ruby TK how to receive input from user?

我是 Ruby 的新手,我希望收到具有 Ruby TK 的用户的意见。网上关于这方面的资料太少了。所以我在这里寻找解决方案。以下是我目前使用的方法。

TkSpinbox.new(left) do
    to 100
    from 1
    value = TkVariable.new()
    increment value += 1
    command (proc{
        puts value
    })
    pack("side" => "bottom",  "padx"=> "50", "pady"=> "54")
end

我不知道如何获取旋转框内的值并将其 return 到另一个地方。这是 GUI 的屏幕截图。

您可以对该代码片段进行一些小改动,以便您正确访问旋转框值:

  1. increment 方法接受一个参数,即每次单击按钮时值增加的量。因此,您可以将 increment value += 1 替换为 increment 1.

  2. 您不需要 value = TkVariable.new() 行,因为 TkSpinbox 会跟踪其值本身。 (如果你确实想设置一个初始值,你可以使用例如 self.value = 10。)

进行这些更改后,这是最终的代码片段:

TkSpinbox.new(left) do
    to 100
    from 1
    increment 1

    # Equivalent to your proc({...}) usage here, but this is better Ruby style
    command do
        puts value
    end
    pack("side" => "bottom",  "padx"=> "50", "pady"=> "54")
end

这是您多次单击递增按钮后的样子:

要使用按钮等其他控件的值,您可以将 TkSpinbox 分配给一个变量并从另一个 command 块访问它的值:

# Assign spinbox to a variable named `spinbox`
spinbox = TkSpinbox.new(left) do
    to 100
    from 1
    increment 1
    command do
        puts value
    end
    pack("side" => "bottom",  "padx"=> "50", "pady"=> "54")
end

TkButton.new(left) do
    text "Do something with the value"
    command do
        # Now `spinbox` is usable from other controls
        # (The value may be a string, so we use .to_i to convert to an integer)
        puts spinbox.value.to_i * 100
    end
    pack("side" => "top")
end