尝试在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'问题。
答案 0 :(得分:1)
我认为问题在于可以设置属性'orient'但不能更改。如果在创建时传递选项,则可以创建PanedWindow“水平”。像
p = Tk::Tile::Paned.new(root, 'orient' => 'horizontal' )
忘记'method_missing'电话。用于动态创建小部件属性的技巧。