您需要閱讀有關grid和pack命令的文檔。
藉助pack
,-fill
和-expand
選項將幫助您調整小部件對調整大小的反應方式。
例子:
pack .widget -fill both -expand true
pack .widget -fill x -expand true -anchor s
隨着grid
,在-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
也適用於所有的.
爲.
孩子是一個頂層窗口。如果你只改變.
興趣的話,你可以改變大小調整過程:如果bind
應用於框架或窗口小部件不是一個頂級窗口
proc doresize { win } {
if { $win eq "." } {
puts "Win $win now has width: [winfo width $win]"
}
}
,該事件僅收到對框架或小部件。
另請注意,您將收到全部的事件。進一步的改變,可向檢查更改寬度:
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'各有優缺點。有些人喜歡一個人,有些人喜歡另一個人,有些人喜歡兩個人。 –
非常感謝!有用。 – UBan