2017-10-25 14 views
0

Tcl/Tk GUI에서 테이블을 만들고 싶습니다. 표의 모든 상자의 최소 크기는 (x = 10, y = 2)이고 임의의 단어 (상자에 삽입 된)가 상자의 크기를 초과하면 Y 축으로 조정됩니다. 도와주세요.TCL에서 테이블의 최소 및 최대 크기 조정

이 코드로 시도 :

proc table {w content args} { 
    frame $w -bg black 
    set r 0 
    foreach row $content { 
     set fields {} 
     set c 0 
     foreach col $row { 
      lappend fields [label $w.$r/$c -text $col] 
      incr c 
     } 
     eval grid $fields -sticky news -padx 1 -pady 1 
     incr r 
    } 
    set w 
} 

#--- Test: 

table .t { 
    {Row Head1 Head2} 
    {1 abc 123123} 
    {2 bcd 12341234} 
    {3 cde 123456789} 
} 

pack .t 

목표 테이블은 다음과 같이 될 것이다 : 나는 다음을 제안

A screen shot is here of the table

+0

그럼 그 테이블이 만들어지는 방법에 따라 달라집니다. 예를 들어 표준 테이블 목록 패키지를 사용하고 있습니까? – Jerry

+0

예 @Jerry, 질문 본문의 테이블 목록 코드에 대한 세부 정보를 업데이트했습니다. 그것을 확인하고 도와주세요. –

+0

그건 정말 테이블 위젯이 아니에요, 라벨의 임시 배치입니다. 어쨌든, 텍스트가 너무 길어서 2 줄에 포함될 수 없다면 어떨까요? 텍스트의 길이가 10 ~ 20 자이지만 공백이없는 경우 어떻게해야합니까? – Jerry

답변

0

. 문장의 한 단어가 최대 열 크기보다 긴 경우를 처리하지 않지만 다른 경우 작동합니다. 텍스트가 문장 (공백이 있음)이거나 문자가 아닌 경우에는 단어를 감쌀 것입니다.

단어의 길이가 열의 최대 크기를 초과하면 문자 줄 바꾸기가 계속 적용됩니다.

package require Tk 

proc wrap {text len} { 
    if {[string len $text] <= $len} { 
    # No need for wrapping 
    } else { 
    if {[string first " " $text] > -1} { 
     # Word wrap 
     set flag "\\M" 
    } else { 
     # Character wrap 
     set flag "" 
    } 
    set re "^.{1,$len}$flag" 
    set result [list] 
    while {1} { 
     regexp $re [string trim $text] res 
     regsub $re [string trim $text] "" text 
     lappend result $res 
     if {$text eq ""} {break} 
    } 
    set text [join $result \n] 
    } 
    return $text 
} 

proc table {w content args} { 
    frame $w -bg black 
    set r 0 
    foreach row $content { 
    set fields {} 
    set c 0 
    foreach col $row { 
     set text [wrap $col 10] 
     lappend fields [label $w.$r/$c -text $text] 
     incr c 
    } 
    eval grid $fields -sticky news -padx 1 -pady 1 
    incr r 
    } 
    set w 
} 

table .t { 
    {Row Head1 Head2} 
    {1 abc 123123} 
    {2 bcd 12341234} 
    {3 cde 123456789} 
    {4 fgh 1234567890987654321} 
    {5 ijk "Data Bits per Mask"} 
} 

pack .t 

출력 :

enter image description here

+0

@ Jerry 대단히 감사합니다. –