2017-09-08 107 views
0

我是tcl \ tk中的新手,我正在開發一個使用它的UI。 UI窗口具有一個框架,該框架具有根據表中的列數填充的動態數量的標籤和文本小部件。每列有一個入口小部件,用戶在其中鍵入的數據填充表中的每一列。如何調整窗口小部件的大小,例如框架,標籤,窗口內部的文本以及tcl中的窗口大小tk GUI

然而,我面臨的問題是,我無法找到一種方法,使窗口內的窗口小部件的大小和位置根據窗口的大小自行調整。也就是說,如果用戶通過拖動和放大窗口來放大窗口,則窗口內的窗口小部件也應該增加大小並根據窗口大小調整其位置。反之亦然,如果窗口大小id減少。像HTML,CSS中的引導程序。 任何人都可以請給我任何想法? 任何幫助,不勝感激。謝謝!

回答

0

您需要閱讀有關gridpack命令的文檔。

藉助pack-fill-expand選項將幫助您調整小部件對調整大小的反應方式。

例子:

pack .widget -fill both -expand true 
pack .widget -fill x -expand true -anchor s 

隨着grid,在-sticky選項和columnconfigurerowconfigure子命令將是對你有用。

例子:

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 
     } 
    } 
} 

參考文獻:gridpackbind

+0

感謝你好!我的小部件正在動態生成,因此我可以在每個小部件的每個循環中執行配置權重步驟?也可以請你舉一個例子,我可以如何綁定一個調整大小,即使是一個小部件?萬分感謝! – UBan

+0

你可以舉一個這樣的簡單例子,並使用不同的選項來學習'-sticky'和'columnconfigure'的工作方式。也可以嘗試用'pack'重寫這個例子。 'pack'和'grid'各有優缺點。有些人喜歡一個人,有些人喜歡另一個人,有些人喜歡兩個人​​。 –

+0

非常感謝!有用。 – UBan