2012-08-02 6 views
0

아직 편집 가능한 팝업 상자를 만들려고하고 내가 해결할 수없는 나 자신에 대한 흥미로운 문제를 만들었습니다 "사용자가 기존 문자열을 편집 할 수있는 상자. 입력 상자에 문자열을 표시하면서 버튼을 누르면 팝업됩니다. 일단 사용자가 문자열을 편집하면 (또는하지 않은 경우) "OK"버튼을 클릭하면 스크립트가 새 문자열을 갖게됩니다. 세 개의 위젯으로 최상위 윈도우를 생성,이 새로운

버튼을 누른 경우 :

내 접근 방식은이 같은 것입니다

  • 간단한 라벨 "편집 문자열, 확인을 눌러 완료";
  • 사전 정의 된 문자열을 포함하는 편집 가능한 항목.
  • 눌렀을 때 최상위 창을 삭제하는 "확인"버튼.

나는 일종의 일을하고 있지만 편집 된 문자열을 얻는 방법을 알아낼 수는 없습니다.

"이벤트 중심"용어로 생각하지 않는다는 것이 근본적인 문제라는 것을 알고 있습니다. 이것은 쉽게 할 수 있어야하지만이 시점에서 나는 숲을 볼 수없는 것 같습니다.

무엇이 누락 되었습니까? 나는 이것을 복잡하게 끝내야합니까? 이 라인에서

#!/usr/bin/wish 

# Create the Pop-up box 
proc popUpEntry { labelString } { 
    global myString 

    puts "POP:myString = $myString" 

    set top [toplevel .top] 
    set labelPop [label $top.labelPop -text $labelString ] 
    set entryPop [entry $top.entryPop -bg white -width 20 -textvar $myString ] 
    set buttonPop [button $top.buttonPop -text "Ok" -command { destroy .top } ] 

    pack $labelPop 
    pack $entryPop 
    pack $buttonPop 
} 

# Pop-up command 
proc DoPop {} { 
    global myString 

    set popUpLabel "Edit string, press ok when done:" 
    puts "Before: myString = $myString" 
    popUpEntry $popUpLabel 
    puts "After: myString = $myString" 
} 

# Initalize 
set myString "String at start" 

# Pop-up button invokes the pop-up command 
set buttonPop [button .buttonPop -width 10 -text "Pop" -command {DoPop} ] 
pack $buttonPop 

# 

답변

2

:

set entryPop [entry $top.entryPop -bg white -width 20 -textvar $myString ] 

entry 컨트롤의 -textvar받는 내용 변수 myString을 설정하고 있습니다.

당신은 $ 기호 제거하여 변수 자체로 그것을 설정해야합니다 : 팝업이 생성 된 후 popUpEntry 기능이 즉시 반환되므로 -textvar $의 mystring에 외에

set entryPop [entry $top.entryPop -bg white -width 20 -textvar myString ] 
+0

아. 사실 이후에 분명합니다. 감사! – user1074069

0

를, 코드가 작동하지 않습니다 - 사용자가 새로운 것을 입력 할 수 있기 전에.

팝업이 닫힐 때까지 기다려야합니다. popUpEntry의 또 다른 전역 변수로 수행 할 수 있습니다 :

... 
global popup_closed 
... 
set buttonPop [button $top.buttonPop -text "Ok" -command { 
     set edit_ready 1 
     destroy .top 
     } 

... 

set edit_ready 0 
popUpEntry $popUpLabel 
vwait edit_ready 
관련 문제