Tk,如何使用.pack进行布局?

时间:2011-09-30 06:13:16

标签: ruby tk

当我在TkRoot的“顶部”放置两个按钮时,它们在彼此之下。 “.pack”的参数是什么,让它们水平对齐? (解决方案也应该适用于n按钮)

Ruby代码会很棒,但任何与tk一起使用的代码都很棒。 (如果你是蟒蛇等人)

编辑:需要以下内容:内部'left'是右侧的TkText + TkScrollbar,我只能使用'top'来确保它按预期工作(按钮超出TkText)< / p>

4 个答案:

答案 0 :(得分:1)

Tk打包器通过从外部窗口小部件中的剩余空间中取出切片并将该切片分配给内部窗口小部件来工作。 (side说明切片被取消的空间的哪一侧,fill说明内部小部件如何占据空间,expand说明外部小部件的大小如何响应更改。)在切片内,内部窗口小部件居中。要想把事情做好,可能需要进行一些调整;如果您在执行此操作时将窗口小部件的背景更改为不同(花边)颜色通常会更容易,因为这样可以更容易地查看正在发生的事情。

如果无法使用打包程序完成所需的操作,则需要使用嵌套框架或(更好)切换到使用网格布局引擎,该引擎更多更强大。 (非常时髦的东西可能需要听取<Configure>事件或使用放置器,但实际上它们都是罕见的东西。所有布局的99.9%可以使用packgrid来完成。)

答案 1 :(得分:1)

与许多Tk开发人员不同,我更喜欢打包到网格,因为它更容易形成一个如何工作的心智模型。也可以使用pack创建相当复杂的布局。我在概念上接近这个的方法是使用一个框架作为容器,然后按顺序(全部或左侧)或并排(左/右)打包。使用这种容器/子方法,您可以在任何地方打包。确保要对齐的内容位于同一容器/框架内。

答案 2 :(得分: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

答案 3 :(得分:0)

单独包装并不是真正擅长将水平和垂直放置在同一个容器中。这不是一个普遍的事实,而更像是一个经验法则。有两种常规解决方案:使用嵌套框架 - 一个或多个用于水平排列的项目,一个或多个用于垂直排列的项目 - 或切换到使用网格。

请注意,嵌套框架并不意味着您需要更改现有窗口小部件的父级。包(和网格和地点)的in选项非常有用。