2012-11-10 2 views
0

Windows XP에서 격자가있는 최상위 창은 사용자가 숫자의 배수에서 크기를 조정하지 못하도록 제한하지 않습니다. X에서는 작동하지만 Windows에서는 작동하지 않습니다. 어떤 픽셀 크기로도 크기를 조정할 수 있습니다.Windows의 눈금이있는 지오메트리는 크기 조정을 제한하지 않습니다.

Windows Windows 관리자가 지원하지 않습니까? 수동으로, 어쩌면 최상위의 크기 조정 이벤트에 일부 명령을 바인딩하여 할 수 있습니까?

답변

3

Windows에서 실제로 작동하지 않는 것은 맞습니다 (Mac OS X/Aqua에서도 마찬가지입니다). 이는 창 관리자가이 기능을 지원하지 않기 때문입니다. 당신은 몇 가지 스크립트로 그것을 합성해야합니다. 그러나 일반적인 복잡한 격자는 하나의 격자 창 이상의 것입니다. 업데이트 된 크기를 다음 그리드 크기로 바꿀 수있는 여분의 공간이 있습니다. 그러면 윈도우가 약간 확장되고 다시 크기가 조정됩니다 ... 그리고 계속해서 ...

따라서 2 단계 초기화가 필요합니다. 우선 우리가 허용해야하는 여분의 공간의 실제 크기를 측정 한 다음 시행 코드를 적용해야합니다.

package require Tk 

proc initGrid {window w h} { 
    # Do nothing for subwindows 
    if {$window ne [winfo toplevel $window]} return 

    lassign [wm grid $window] xcount ycount xstep ystep 
    set wExtra [expr {$w - $xcount*$xstep}] 
    set hExtra [expr {$h - $ycount*$ystep}] 
    bind $window <Configure> [list resizeGrid $wExtra $hExtra %W %w %h] 
} 
proc resizeGrid {wExtra hExtra window w h} { 
    # Do nothing for subwindows 
    if {$window ne [winfo toplevel $window]} return 

    lassign [wm grid $window] xcount ycount xstep ystep 
    if {$w-$wExtra != $xcount*$xstep || $h-$hExtra != $ycount*$ystep} { 
     set w [expr {($w - $wExtra)/$xstep}] 
     set h [expr {($h - $hExtra)/$ystep}] 
     wm grid $window $w $h $xstep $ystep 
    } 
} 

pack [text .t -setgrid 1] -fill both -expand 1 
bind . <Configure> {initGrid %W %w %h} 

자세히 알 수 있듯이이 작업은 특히 간단하지 않습니다.

+0

건강 경고 : Windows에서는이 방법을 사용하지 않았지만 OSX에서는 나에게 잘 돌아 간다. 그래서 당신에게 도움이 될만한 합당한 기회가있다. –

+0

크기 조정 중에는 작동하지만 깜박이다. 창의 크기를 조절할 수 없게하고 크기 조정을위한 4 버튼 위젯을 만드는 것이 더 안정적 일 것입니다. 아니면 2 개의 텍스트 필드, 또는 ... 어쨌든, 내가 뭔가를 놓치거나 잘못한 것을 알았으니, 내 [레벨 편집자] (http://troligen.se/wooden2.jpg)와 계속할 수 있습니다. 감사. – potrzebie

+0

많은 심오한 건축 작업없이 깜박임에 대해 많은 것을 할 수 있다고 생각하지 않습니다. ''이벤트는 크기 정보를 적시에받는 방법입니다. (나는 실제로'-setgrid'를 전혀 사용하지 않고 여러분이 얻은 것을 다루는 것을 권고합니다.) –

관련 문제