Tk,如何使用.pack进行布局?
当我将两个按钮放在TkRoot的“顶部”部分时,它们在彼此的下方。 '.pack'的参数是水平对齐的吗? (该解决方案也应该适用于n按钮)Tk,如何使用.pack进行布局?
Ruby代码会很棒,但任何与tk一起工作的东西都很棒。 (如果你是一个Python等人)
编辑:需要做以下事情:'left'是一个TkText + TkScrollbar在它的右边,我只能用'top'来确定它的工作原理打算(即按钮高于TkText)
您必须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
Tk的包装工作,采取了分片关闭外构件内的剩余空间,在分配这些切片内部部件。 (side
表示切片被取下的空间的哪一侧,fill
表示内部小部件如何占据空间,expand
表示当外部小部件的大小改变时情况如何响应)。在切片中,内部小部件居中。它可以采取一些调整,以确保正确的事情;如果在做这件事情时将小部件的背景更改为不同(鲜艳)的颜色,通常会更容易,因为这样可以更容易地看到发生了什么。
如果你想要打包器无法完成,无论你需要使用嵌套帧还是(更好)切换到使用gridder布局引擎,这是多得多更强大。 (非常时髦的东西可能需要听<Configure>
事件或使用砂矿,但实际上他们都是罕见的事情。所有布局的99.9%,可与pack
和grid
来完成。)
对于那个简单的程序,我只想使用pack,这将是矫枉过正。 – NopeAndNever
@Nope:尽管我发现我使用网格,即使是简单的布局(除了极少数例外)。哦,里程毕竟不一样。猜猜这取决于我们的想法... –
不像许多Tk的开发商,我更喜欢包到网格,因为它更容易形成它如何工作的心理模型。还可以使用包创建相当复杂的布局。我在概念上采用这种方式的方式是使用框架作为容器,然后按顺序(全部右侧或左侧)或并排(左侧/右侧)包装东西。使用这种容器/小孩的方法,你可以在任何你想要的地方收集东西。确保你想要对齐的东西在同一个容器/框架内。
也许是一个简短的例子,2帧一横一垂直,我很高兴: - D请美丽。 – NopeAndNever
全部包装本身并不是真正的把物件水平和垂直放置在同一个容器中。这不是一个普遍的事实,但更像是一个经验法则。有两种常规解决方案:使用嵌套的框架 - 一个或多个水平排列的项目和一个或多个垂直排列的项目 - 或切换到使用网格。
请注意,嵌套的框架并不意味着您需要更改现有小部件的父项。包(以及网格和地点)的in
选项非常有用。
编辑我的问题以反映真实需求。 – NopeAndNever