2017-10-25 11 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

ありがとうございます@ジェリー。 –

関連する問題