Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby Tk,如何使用.pack进行布局?_Ruby_Tk - Fatal编程技术网

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

Ruby Tk,如何使用.pack进行布局?,ruby,tk,Ruby,Tk,当我将两个按钮放置在TkRoot的“顶部”部分时,它们彼此下方。 “.pack”使其水平对齐的参数是什么? (该解决方案还应适用于n按钮) Ruby代码很好,但是任何与tk一起工作的代码都很好。(如果您是python等人) 编辑:需要以下内容:在“左”的内部是一个TkText+TkScrollbar,在它的右侧,我只能使用“top”来确保它按预期工作(按钮位于TkText上方)您必须打包左侧的按钮。我修改了我在网上找到的一个Tk示例: require 'tk' root = TkRoot.ne

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

Ruby代码很好,但是任何与tk一起工作的代码都很好。(如果您是python等人)


编辑:需要以下内容:在“左”的内部是一个TkText+TkScrollbar,在它的右侧,我只能使用“top”来确保它按预期工作(按钮位于TkText上方)

您必须
打包
左侧的按钮。我修改了我在网上找到的一个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打包器的工作原理是从外部小部件内的剩余空间中取出一片,然后将该片分配给内部小部件。(
表示切片从空间的哪一侧取下,
填充
表示内部小部件如何占据空间,
展开
表示外部小部件大小变化时的响应。)在切片内,内部小部件居中。它可以采取一些调整,使事情正确;如果在执行此操作时将小部件的背景更改为不同的(花哨的)颜色,通常会更容易,因为这样更容易看到正在发生的事情


如果你想要的东西不能用打包机完成,你需要使用嵌套框架或者(更好的)切换到使用gridder布局引擎,这是更强大的。(非常时髦的东西可能需要听
事件或使用placer,但实际上它们都是稀罕的事情。99.9%的布局可以用
pack
grid
完成)

与许多Tk开发人员不同,我更喜欢pack而不是grid,因为它更容易形成一个工作原理的心智模型。也可以使用pack创建非常复杂的布局。从概念上讲,我处理这个问题的方法是使用框架作为容器,然后按顺序(向右或向左)或并排(向左/向右)打包。使用这种容器/子容器的方法,你可以把东西打包到任何你想要的地方。确保要对齐的对象位于同一容器/框架内。

单独打包并不擅长将对象水平和垂直放置在同一容器中。这不是一个普遍的真理,但更像是一条经验法则。有两种传统的解决方案:使用嵌套框架——一个或多个用于水平排列的项目,一个或多个用于垂直排列的项目——或者切换到使用网格


请注意,嵌套框架并不意味着您需要更改现有小部件的父级。在
中,pack(以及grid和place)的
选项非常有用。

编辑了我的问题,以反映真实的需求。也许是一个简短的例子,有两个框架,一个水平,一个垂直,我很高兴:-D非常好。对于这个简单的程序,我只想使用pack,这太过分了。@Nope:但我发现我甚至在简单的布局中使用网格(只有极少数例外)。哦,好吧,里程毕竟是不同的。我想这取决于我们怎么想…