Ruby/Tk窗格窗口';定向';选项不适用于水平值

Ruby/Tk窗格窗口';定向';选项不适用于水平值,ruby,tk,Ruby,Tk,尝试在Ruby/Tk中添加窗格窗口时,出现以下错误: C:/Users/user/Ruby193/lib/ruby/1.9.1/tk.rb:3016:in `_invoke': Attempt to change read-only option (RuntimeError) 每当我向代码中添加orient选项时,如下所示: p = Tk::Tile::Paned.new(parent) { orient 'horizontal' } 出于某种原因,“orient”似乎是只读的(默认为“ve

尝试在Ruby/Tk中添加窗格窗口时,出现以下错误:

C:/Users/user/Ruby193/lib/ruby/1.9.1/tk.rb:3016:in `_invoke': Attempt to change read-only option (RuntimeError)
每当我向代码中添加orient选项时,如下所示:

p = Tk::Tile::Paned.new(parent) { orient 'horizontal' }
出于某种原因,“orient”似乎是只读的(默认为“vertical”)?我注意到web上的ruby/tk教程中有一个窗格窗口示例,它避免使用orient选项,可能是因为它们遇到了相同的错误

如果您将以下教程代码粘贴到.rb文件中并运行它(无方向选项),它将正常工作。添加与上述类似的“定向”选项将失败

require 'tk'
require 'tkextlib/tile'

$resultsVar = TkVariable.new
root = TkRoot.new
root.title = "Window"

p = Tk::Tile::Paned.new(root)do
  height 110
  place('height' => 100, 'width' => 200, 'x' => 10, 'y' => 10)
  #orient 'horizontal' # <== uncomment this line to see error
end

f1 = TkFrame.new(p) {
  relief 'groove'
  borderwidth 3
  background "red"
  padx 30
  pady 30
  pack('side' => 'left', 'pady' => 100)
}
f2 = TkFrame.new (p){
  relief 'groove'
  borderwidth 3
  background "yellow"
  padx 30
  pady 30
  pack('side' => 'right', 'pady' => 100)
}

p.add f1 #, nil <== had to remove nil option here because this also caused an error
p.add f2 #, nil

Tk.mainloop
需要“tk”
需要“txtlib/tile”
$resultsVar=TkVariable.new
root=TkRoot.new
root.title=“窗口”
p=Tk::Tile::Paned.new(root)do
高度110
位置('高度'=>100,'宽度'=>200,'x'=>10,'y'=>10)
#方向“水平”#“左”,“帕迪”=>100)
}
f2=TkFrame.new(p){
浮雕“凹槽”
边框宽度3
背景“黄色”
padx 30
帕迪30
包装('side'=>right','pady'=>100)
}

p、 添加f1#,nil我认为问题在于属性“orient”可以设置,但不能更改。如果在创建时传递该选项,则可以创建“水平”窗格窗口。像

p=Tk::Tile::Paned.new(根,'orient'=>horizontal')


忘记“method\u missing”调用。是一种通过友好方式创建小部件属性的技巧。

我认为问题在于属性“orient”可以设置,但不能更改。如果在创建时传递该选项,则可以创建“水平”窗格窗口。像

p=Tk::Tile::Paned.new(根,'orient'=>horizontal')


忘记“method\u missing”调用。是一种通过友好方式创建小部件属性的技巧。

顺便说一句,我从教程中借用了代码:找到了一个解决方法,但它没有使用平台样式的平铺控件。将示例第8行的“Tk::Tile::Paned”替换为“TkPanedWindow”。顺便说一句,我从中借用的代码教程如下:找到了一个解决方法,但它没有使用平台样式的Tile控件。将示例中第8行的“Tk::Tile::Paned”替换为“TkPanedWindow”。