2011-09-30 178 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选项非常有用。

相关问题