2016-10-10 9 views
0

フレームにラジオボタンのリストを作成していますが、リストは最終的に膨大になり、ユーザーはアイテムを選択することが難しくなります。 このフレームにスクロールバーを追加することはできますか? リストボックスを追加しようとしましたが、助けがありませんでした。tclフレームにスクロールバーを追加する方法

これは私のコードです。

frame .top.d.b -width 100 -height 20 -borderwidth 2 -relief raised 
label .top.d.b.l1 -font fontTEMP_varwidth -text "Comparision Libraries" -anchor center -padx 2 -pady 4 
set whu .top.d.b 
grid .top.d.b -row 7 -column 2 -sticky nsew 
grid .top.d.b.l1 -row 1 -column 2 
set w 0 
foreach elem $mylist { 
radiobutton .top.d.b.$w -text $elem -command [list selectlib $elem $w] -value $elem.abc -padx 2 -pady 2 
grid .top.d.b.$w -row $a -column $r -sticky w 
incr a 
incr w 
} 
} else { 
puts "STD_CELLS_LIBPATH not found\n" 
} 
} 
+1

[リストボックス(https://www.tcl.tk/man/tcl8.4/TkCmd/listbox.htm)はラジオボタンよりはるかに有用です。 –

答えて

0

これはできません。 scrollコマンドオプション(-xscrollcommand、-yscrollcommand)とxview/yviewウィジェットコマンドを持つウィジェットだけをスクロールできます。

+0

さて、右は同じサイズのフレームに対応するためにラジオボタンのサイズを減らすことができますか?ラジオボタンサイズのオプションはありますか? –

+0

@DanishSheikh:ドキュメントを見ましたか?はい、ありますが、しないでください。マリオのようにリストボックスを代わりに使用してみてください。 –

1

Tkのスクロールプロトコルを実装するウィジェットのみスクロールバーに関連付けることができます。フレームはそのようなウィジェットではありません。

キャンバスにスクロール領域が何であるかを伝えるのであれば、枠をキャンバス(「ウィジェット」キャンバスアイテムタイプ)に入れてキャンバスです。フレームとその内容がキャンバスの子であることを確認して、それらが正しく機能するようにする必要があります。

1

スクロールバーと組み合わせたキャンバスは、ウィジェットをキャンバスに配置するよりも使用できます。例:この場合

#!/usr/bin/env wish 

ttk::frame .frAlles 

# create canvas with scrollbars 
canvas .frAlles.c -width 400 -height 200 -xscrollcommand ".frAlles.xscroll set" -yscrollcommand ".frAlles.yscroll set" 
ttk::scrollbar .frAlles.xscroll -orient horizontal -command ".frAlles.c xview" 
ttk::scrollbar .frAlles.yscroll -command ".frAlles.c yview" 
pack .frAlles.xscroll -side bottom -fill x 
pack .frAlles.yscroll -side right -fill y 
pack .frAlles.c -expand yes -fill both -side top 

# create frame with widgets 
ttk::frame .frAlles.c.frWidgets -borderwidth 1 -relief solid -width 340 -height 700 

for {set i 0} {$i <=20} {incr i} { 
    ttk::label .frAlles.c.frWidgets.lb$i -text "Label $i:" 
    ttk::entry .frAlles.c.frWidgets.en$i 
    ttk::button .frAlles.c.frWidgets.bt$i -text "Button $i" -command exit 
    grid .frAlles.c.frWidgets.lb$i -padx 2 -pady 2 -row $i -column 0 
    grid .frAlles.c.frWidgets.en$i -padx 2 -pady 2 -row $i -column 1 
    grid .frAlles.c.frWidgets.bt$i -padx 2 -pady 2 -row $i -column 2 
} 

# create frame with buttons 
ttk::frame .frAlles.c.frButtons -borderwidth 1 -relief solid -width 340 -height 40 
ttk::button .frAlles.c.frButtons.btOK -text "OK" -command exit 
ttk::button .frAlles.c.frButtons.btAbbruch -text "Abbruch" -command exit 
pack .frAlles.c.frButtons.btOK -padx 2 -pady 2 -side left 
pack .frAlles.c.frButtons.btAbbruch -padx 2 -pady 2 -side left 

# place widgets and buttons 
.frAlles.c create window 0 0 -anchor nw -window .frAlles.c.frWidgets 
.frAlles.c create window 200 650 -anchor c -window .frAlles.c.frButtons 

# determine the scrollregion 
.frAlles.c configure -scrollregion [.frAlles.c bbox all] 

# show the canvas 
pack .frAlles -expand yes -fill both -side top 
関連する問題