Ruby+;Tk';s的画布和形状正在过时
我运行的是Windows+Ruby2.3,正在处理Ruby+;Tk';s的画布和形状正在过时,ruby,tk,Ruby,Tk,我运行的是Windows+Ruby2.3,正在处理tk库。我试图让它绘制一个不同颜色的矩形网格,但每当我试图向画布添加形状时,我的脚本就会崩溃。下面是代码的精简版本: require 'tk' require 'tkextlib/tile' root = TkRoot.new content = Tk::Tile::Frame.new(root) canvas = TkCanvas.new(content) line = TkcLine.new( canvas, 0, 0, 10, 10, :f
tk
库。我试图让它绘制一个不同颜色的矩形网格,但每当我试图向画布添加形状时,我的脚本就会崩溃。下面是代码的精简版本:
require 'tk'
require 'tkextlib/tile'
root = TkRoot.new
content = Tk::Tile::Frame.new(root)
canvas = TkCanvas.new(content)
line = TkcLine.new( canvas, 0, 0, 10, 10, :fill => 'red' )
Tk.mainloop
但是,当我运行它时,我得到以下错误+回溯:
C:/Ruby23/lib/ruby/2.3.0/tk/itemconfig.rb:115:in `hash_kv': wrong argument type nil (expected Array) (TypeError)
from C:/Ruby23/lib/ruby/2.3.0/tk/itemconfig.rb:115:in `itemconfig_hash_kv'
from C:/Ruby23/lib/ruby/2.3.0/tk/canvas.rb:722:in `_parse_create_args'
from C:/Ruby23/lib/ruby/2.3.0/tk/canvas.rb:735:in `create'
from C:/Ruby23/lib/ruby/2.3.0/tk/canvas.rb:758:in `create_self'
from C:/Ruby23/lib/ruby/2.3.0/tk/canvas.rb:751:in `initialize'
from C:/nopathforyou.rb:9:in `new'
from C:/nopathforyou.rb:9:in `<main>'
C:/Ruby23/lib/ruby/2.3.0/tk/itemconfig.rb:115:in'hash_kv':错误的参数类型nil(应为数组)(TypeError)
来自C:/Ruby23/lib/ruby/2.3.0/tk/itemconfig.rb:115:in`itemconfig\u hash\u kv'
来自C:/Ruby23/lib/ruby/2.3.0/tk/canvas.rb:722:in`\u parse\u create\u args'
来自C:/Ruby23/lib/ruby/2.3.0/tk/canvas.rb:735:in'create'
来自C:/Ruby23/lib/ruby/2.3.0/tk/canvas.rb:758:in'create_self'
来自C:/Ruby23/lib/ruby/2.3.0/tk/canvas.rb:751:in'initialize'
来自C:/nopathforyou.rb:9:in'new'
从C:/nopathforyou.rb:9:in`'
有人知道该怎么办吗?提前感谢。我也遇到了同样的错误,我最终通过添加以下代码解决了这个问题:
module TkItemConfigOptkeys
def itemconfig_hash_kv(id, keys, enc_mode = [], conf = [])
hash_kv(__conv_item_keyonly_opts(id, keys), enc_mode, conf)
end
end
它应该在“require”语句之后,比如说,您的代码应该如下所示:
require 'tk'
require 'tkextlib/tile'
module TkItemConfigOptkeys
def itemconfig_hash_kv(id, keys, enc_mode = [], conf = [])
hash_kv(__conv_item_keyonly_opts(id, keys), enc_mode, conf)
end
end
root = TkRoot.new
content = Tk::Tile::Frame.new(root)
canvas = TkCanvas.new(content)
line = TkcLine.new( canvas, 0, 0, 10, 10, :fill => 'red' )
Tk.mainloop
添加了这些之后,我的代码工作起来很有魅力。Ruby/Tk已经在中修复了这个bug
因此,您可以只更新您的tk库,作为替代。@punkoodles这将是最好的。@punkoodles我已经向Ruby/tk发送了一个pull请求,贡献者告诉我这个bug已经被修复,但修复将在Ruby发布后进行。也许在未来的版本中你不再需要它了。