Ruby / Tk Paned窗口'orient'选项不适用于水平值

时间:2013-03-13 19:30:28

标签: ruby tk

尝试在Ruby / Tk中添加Paned窗口,我收到以下错误:

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上注意到一个带有Paned窗口示例的ruby / tk教程,它避免使用orient选项,可能是因为它们遇到了同样的错误?

如果将以下教程代码粘贴到.rb文件中并运行它(无定向选项),则可以正常工作。添加类似于上面的orient选项,它会失败。

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.rb并跟踪错误跟踪,似乎表明存在'method_missing'问题。

1 个答案:

答案 0 :(得分:1)

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

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

忘记'method_missing'电话。用于动态创建小部件属性的技巧。