首页 > 解决方案 > Ruby TK 如何接收用户的输入?

问题描述

我是 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

我不知道如何获取旋转框中的值并将其返回到另一个地方。这是图形用户界面的屏幕截图。 在此处输入图像描述

标签: rubytk

解决方案


您可以对该代码片段进行一些小的更改,以使您可以正确访问 spinbox 值:

  1. increment方法采用一个参数,即每次单击按钮时增加值的量。所以你可以increment value += 1用 just替换increment 1

  2. 您不需要这value = TkVariable.new()条线,因为它TkSpinbox会跟踪其价值本身。(如果你确实想设置一个初始值,你会使用 eg 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

推荐阅读