Ruby+;Tk';s的画布和形状正在过时

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

我运行的是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, :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发布后进行。也许在未来的版本中你不再需要它了。