1

MadLibsプログラムにTKを使用してRubyでGUIを作成しようとしています。基本的に、エントリウィジェットからユーザーの入力を受け取り、テキスト行の特定の単語をその情報に置き換える必要があります。関連するコードは次のとおりです($ contentは親ウィンドウです)。

$name=TkVariable.new()
name=Tk::Tile::Entry.new($content) {width 7; textvariable $name}.grid(:column =>1, :row  =>0, :sticky => 'we')
# Mad Lib base text
$text=TkVariable.new("My name is #{name.get}.")

# Displays end result
def showResult
display=Tk::Tile::Label.new($content) {textvariable $text}.grid(:column =>0, :row     => 6, :sticky => 'we')
end

# Button to replace input in base text.
# Clicking this button adds a new Label widget containing the text. The variables,
#however, retain whatever value they were initialized to (in this case, nothing)
Tk::Tile::Button.new($content) {text 'Submit'; command 'showResult'}.grid(:column => 1,     :row => 5, :sticky => 'we')

私が理解しているように、name.getは、エントリウィジェットのフィールドに入力したものをすべて表示するはずです。しかし、nameも$nameも更新されません。

4

2 に答える 2

0

テキスト変数はこのようには機能しません。あるテキスト変数を別のテキスト変数に埋め込もうとしているようです。すると、このステートメントが実行された時点で変数"My name is #{name.get}."の値が取得され、動的に更新されません。name

エントリ ウィジェットとラベルを同期させたい場合は、同じ変数を共有する必要があります。

于 2012-05-29T11:21:31.330 に答える
0

わかりませんが試してみてください....

def showResult
   $text.value = "My name is #{name.get}."
   display=Tk::Tile::Label.new($content) {textvariable $text}.grid(:column =>0, :row     =>    6, :sticky => 'we')
end

これは、showResult が呼び出されるたびに変数を更新する必要がありますが、エントリ ボックスでは完全にはわかりません

これがTkVariablesを更新する方法です

于 2014-01-25T00:37:02.437 に答える