2011-09-30 123 views
0

當我將兩個按鈕放在TkRoot的「頂部」部分時,它們在彼此的下方。 '.pack'的參數是水平對齊的嗎? (該解決方案也應該適用於n按鈕)Tk,如何使用.pack進行佈局?

Ruby代碼會很棒,但任何與tk一起工作的東西都很棒。 (如果你是一個Python等人)

編輯:需要做以下事情:'left'是一個TkText + TkScrollbar在它的右邊,我只能用'top'來確定它的工作原理打算(即按鈕高於TkText)

回答

0

您必須pack左邊的按鈕。我修改了Tk的例子,我在網上找到:

require 'tk' 

root = TkRoot.new 
# button 1 
btn_OK = TkButton.new(root) do 
    text "OK" 
    borderwidth 5 
    underline 0 
    state "normal" 
    cursor "watch" 
    font TkFont.new('times 20 bold') 
    foreground "red" 
    activebackground "blue" 
    relief  "groove" 
    command (proc {}) 
    pack("side" => "left", "padx"=> "50", "pady"=> "10") 
end 
# button 2 
btn_Cancel = TkButton.new(root) do 
    text "Cancel" 
    borderwidth 5 
    underline 0 
    state "normal" 
    cursor "watch" 
    font TkFont.new('times 20 bold') 
    foreground "red" 
    activebackground "blue" 
    relief  "groove" 
    command (proc { exit }) 
    pack("side" => "left", "padx"=> "50", "pady"=> "10") 
end 
Tk.mainloop 
+0

編輯我的問題以反映真實需求。 – NopeAndNever

1

Tk的包裝工作,採取了分片關閉外構件內的剩餘空間,在分配這些切片內部部件。 (side表示切片被取下的空間的哪一側,fill表示內部小部件如何佔據空間,expand表示當外部小部件的大小改變時情況如何響應)。在切片中,內部小部件居中。它可以採取一些調整,以確保正確的事情;如果在做這件事情時將小部件的背景更改爲不同(鮮豔)的顏色,通常會更容易,因爲這樣可以更容易地看到發生了什麼。

如果你想要打包器無法完成,無論你需要使用嵌套幀還是(更好)切換到使用gridder佈局引擎,這是多得多更強大。 (非常時髦的東西可能需要聽<Configure>事件或使用砂礦,但實際上他們都是罕見的事情。所有佈局的99.9%,可與packgrid來完成。)

+0

對於那個簡單的程序,我只想使用pack,這將是矯枉過正。 – NopeAndNever

+0

@Nope:儘管我發現我使用網格,即使是簡單的佈局(除了極少數例外)。哦,里程畢竟不一樣。猜猜這取決於我們的想法... –

1

不像許多Tk的開發商,我更喜歡包到網格,因爲它更容易形成它如何工作的心理模型。還可以使用包創建相當複雜的佈局。我在概念上採用這種方式的方式是使用框架作爲容器,然後按順序(全部右側或左側)或並排(左側/右側)包裝東西。使用這種容器/小孩的方法,你可以在任何你想要的地方收集東西。確保你想要對齊的東西在同一個容器/框架內。

+0

也許是一個簡短的例子,2幀一橫一垂直,我很高興: - D請美麗。 – NopeAndNever

0

全部包裝本身並不是真正的把物件水平和垂直放置在同一個容器中。這不是一個普遍的事實,但更像是一個經驗法則。有兩種常規解決方案:使用嵌套的框架 - 一個或多個水平排列的項目和一個或多個垂直排列的項目 - 或切換到使用網格。

請注意,嵌套的框架並不意味着您需要更改現有小部件的父項。包(以及網格和地點)的in選項非常有用。

相關問題