2016-07-07 8 views
0

사용자가 일부 작업을 원하지 않을 때까지 메시지 상자를 계속 표시하는 간단한 스레드를 만들었습니다. 다음은 코드입니다.Tcl/tk - 스레드에서 yesno messageBox를 표시하는 방법

thread::create { while [tk_messageBox -message "Do you want to Exit?!!" -type yesno] { 
    doSomething 
}} 

그러나 스레드가 생성되었지만 메시지 상자는 표시되지 않습니다. 어떻게 이러한 메시지 상자를 실제로 볼 수 있습니까?

답변

1

스레드에 Tk를 표시해야합니다. 스레드 패키지에만 기본적으로 종속 스레드에 있습니다 :

thread::create { 
    package require Tk 
    while [tk_messageBox -message "Do you want to Exit?!!" -type yesno] { 
     doSomething 
    } 
} 

또한 코드에서 다른 문제를 해결해야합니다.

  1. 항상
    { 중괄호 }while의 상태를했습니다. 이를 사용하지 않으면 표현식의 동적 부분은 한 번만 평가되며 while을 사용하여 실제로 원하는 부분이 아닙니다.
  2. 스레드가 thread::wait인지 확인하십시오. 프로세스 및 스레드 관리를 향상시킬 수 있습니다. 메시지 상자 루프를 완전히 다시 작성해야합니다.

이이 코드로 이어질 수 있습니다

thread::create { 
    package require Tk 

    proc periodicallyMaybeDoSomething {} { 
     if {[tk_messageBox -message "Do you want to Exit?!!" -type yesno]} { 
      thread::exit 
     } 
     doSomething 
     # pick a better delay maybe? 
     after 1 periodicallyMaybeDoSomething 
    } 
    after 1 periodicallyMaybeDoSomething 

    thread::wait 
} 

는 8.6을 사용하는 경우, 당신은 코드를보다 우아하게 코 루틴을 사용할 수 있습니다.

+0

덕분에 DONAL이 - 시도가 잘 작동하지 않고 대화 상자를 열었지만 클릭에는이 표준 출력 " 을 실행하는 동안 "표준 출력 " 라는 채널을 찾을 수 없습니다" "라는 채널을 찾을 수 없습니다"내용에 오류 대화 상자를 보여 주었다 "해봐요을두고 (절차 "periodicallyMaybeDoSomething"라인 5) 어떻게 스레드 본체에 표준 출력을 참조하는 " (스크립트"후 ") 어떤 아이디어"periodicallyMaybeDoSomething " 내에서 호출 – BabyGroot