2012-05-29 1 views
1

Mad Libs 프로그램 용 TK를 사용하여 Ruby에 GUI를 작성하려고합니다. 본질적으로 Entry 위젯에서 사용자의 입력을 받아 텍스트 줄의 특정 단어를 해당 정보로 바꿔야합니다. 다음은 관련 코드 ($ 함량은 부모 창입니다)입니다 : 내가 알고있는 것처럼Ruby Tk 입력 위젯이 textvariable을 업데이트하지 않습니다.

$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 내가 엔트리 위젯의 필드에 입력 한대로 저를 제공해야합니다. 그러나 이름도 $ 이름도 업데이트되지 않습니다.

답변

0

텍스트 변수가이 방식으로 작동하지 않습니다. 한 텍스트 변수를 다른 텍스트 변수에 포함하려는 것 같습니다. "My name is #{name.get}."을 실행하면이 문이 실행될 때 name 변수 의 값이이되면 동적으로 업데이트되지 않습니다.

항목 위젯과 레이블을 동기화 상태로 유지하려면 동일한 변수를 공유해야합니다. 이 때마다 showResult이 입력 상자에 완전히 확인 아니라이라고 변수를 업데이트해야합니다

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 

+0

도움을 주셔서 감사합니다. – jac

0
확인

하지하지만 시도는 ....

이 내 TkVariables를 업데이트하는 방법입니다