gridおよびpackコマンドに関する説明書を読む必要があります。
pack
とすると、 ウィジェットがサイズ変更に反応する方法を調整するのに役立ちます(-fill
とオプション)。
例:grid
で
pack .widget -fill both -expand true
pack .widget -fill x -expand true -anchor s
、-sticky
オプションとcolumnconfigure
とrowconfigure
サブコマンドはあなたに有用であろう。
例:
grid .widget -sticky ew
grid columnconfigure . 0 -weight 1
いくつかのケースでは、サイズ変更時に取る必要があります特別なアクションがあるかもしれません。この場合、bindコマンドが便利です。 <Configure>
イベントにバインドして、ウィジェットのサイズを調整するか、必要に応じて他のアクションを実行できます。
編集:
grid columnconfigure
を含むフレームのカラムに適用されます。だから、ウィジェットごとに実行する必要はありません。上記の例では、.
フレームに.widget
が含まれ、.
フレームの列が設定されています。
# in this example, the entry fields will adjust their width when
# the window is resized.
package require Tk
grid columnconfigure . 1 -weight 1
foreach {val} {1 2 3 4 5 6 7} {
ttk::label .lab$val -text "Label $val:"
ttk::entry .entry$val -textvariable mydata($val)
grid .lab$val .entry$val -in . -sticky w
# change the configuration for .entry$val only...
grid configure .entry$val -sticky ew
}
proc doresize { win } {
puts "Win $win now has width: [winfo width $win]"
}
bind . <Configure> [list ::doresize %W]
.
がトップレベルウィンドウであるように、この例で、bind
も.
の子どもたちのすべてに適用されることに注意してください。あなただけ.
への変更に興味がある場合は、サイズ変更手順を変更することができます。
proc doresize { win } {
if { $win eq "." } {
puts "Win $win now has width: [winfo width $win]"
}
}
bind
がトップレベルウィンドウでないフレームやウィジェットに適用された場合、イベントはそのためだけに受信され、フレームまたはウィジェット。
すべてイベントが発生することにも注意してください。さらに、変更は幅への変更をチェックするために行うことができます。
set vars(last.width) 0
proc doresize { win } {
variable vars
if { $win eq "." } {
set newwidth [winfo width $win]
if { $newwidth != $vars(last.width) } {
puts "Win $win now has width: [winfo width $win]"
if { $vars(last.width) != 0 } {
# this is not the first time, as last.width is not zero
# do something due to window resize.
}
set vars(last.width) $newwidth
}
}
}
参考文献:grid、pack、bind
こんにちは感謝を!私のウィジェットは動的に形成されているので、ウィジェットのそれぞれのループごとに構成ウェイトステップを実行できますか?また、ウィジェットのサイズ変更をどのようにバインドすることができるかといった例を挙げてください。ありがとう、トン! – UBan
このような簡単な例を取って、 '-sticky'と' columnconfigure'がどのように動作するかを知るために、さまざまなオプションで遊んでみてください。また、 'pack'を使ってサンプルを書き直してみてください。 'pack'と' grid'にはそれぞれ長所と短所があります。ある人は1人、いくつかの人は他の人、いくつかの人は両方を使用しています。 –
ありがとう!できます。 – UBan