2012-01-13 10 views

답변

1

, 나는 이런 식으로 뭔가를 사용 : 존재하지 않는 위젯의 이름을 반환하는 보장의

variable sequencecounter 0; # Don't touch outside this code! 
proc unique {{parent ""}} { 
    variable sequencecounter 
    while {[winfo exists [set w $parent.w$sequencecounter]]} { 
     incr sequencecounter 
    } 
    return $w 
} 

. (TK는 더 심한 경쟁 조건이없는 알 수 있도록 단일 스레드를 실행하도록 보장한다.) 이런 식으로 사용 :

set top [toplevel [unique]] 
set btn [button [unique $top] -text "Hi" -command { exit }] 
pack $btn 
+0

그러나 위젯 이름 자체의 고유 구성 요소 인 _subtle_ 메모리 누수가 생성됩니다. 예, 이것은 절대적으로 들리지만 실재이며 시간이 지남에 따라 많은 위젯을 생성하는 아주 오랫동안 실행중인 프로그램을 가지고 있다면 문제가 될 수 있습니다. (고유 한 이름을 만드는 다른 모든 스키마도 동일한 누출을 가지게됩니다. 문제는 이상한 이유로 Tk 인턴이 경로 이름 구성 요소를 사용한다는 것입니다.) –

1

은 아마 그것을 할 몇 가지 애호가 방법이 있습니다,하지만 고유 한 이름이 필요 내 경우에는, 난 그냥, 시간 데이터에서 기타 등의 많은있다

set systemTime [clock seconds]; 
set myname [concat [clock format $systemTime -format %H%M%S] ".myext"] 

같은 것을 하나를 구성 다른 서식 지정 가능성.

우아하지는 않지만 내 물건에 대해 작업하고 있으며, 특정 트랙을 유지해야하는 경우에도 유용합니다. 나는 독특한 위젯 이름을 필요로 할 때

+0

당신은 확실히 가능하다 같은 초에 두 개 이상의 이름을 생성하는 경우이 중단됩니다 창 경로 이름을 생성하려면이 작업을 수행해야합니다. –

+0

사실입니다. 필자는 필요한 경우 추가 데이터를 끝에 추가하여 훨씬 더 독창적인지 확인하기 위해 몇 가지 추가 검사를 수행합니다. "사용자"속도 (예 : GUI)로 고유 한 이름을 만들 필요가 있지만 "프로그램"속도 (예 : 루프 등)로 실행하는 경우에는 유용하지 않다고 생각합니다. – JasonBourne