【问题标题】:Ruby Shoes GUI: Continually Updating ParagraphsRuby Shoes GUI:不断更新段落
【发布时间】:2013-08-05 20:44:14
【问题描述】:

Ruby 的 Shoes GUI 工具包似乎是向我的各种脚本添加 GUI 的一种非常好且简单的方法,但是在我撞到它之后,我似乎无法通过循环不断更新段落。

这是显示我正在尝试做的最小代码:

Shoes.app do
    stack do
        @exit = button "Exit"
        @log = stack { para "Logging goes here..." }
        @exit.click { exit }

    end

    loop do
        sleep 1
        contents = `ls`
        @log.append { para contents }
    end

end

但这只会永远阻塞,我的 GUI 永远不会出现,直到我终止 ruby​​ 进程,此时我的所有信息都会出现。

我尝试将“内容”检查循环并附加到一个单独的类中,在它自己的“堆栈”或“流”循环中,尝试根据“块重定向”标头将@log 传递给单独的类的方法在鞋子规则中(http://shoesrb.com/manual/Rules.html),在尝试了我能想到的一切之后仍然没有快乐。有什么想法可以让这个工作吗?我在想我只是没有完全掌握 Shoes 如何设置 GUI。

【问题讨论】:

    标签: ruby shoes


    【解决方案1】:

    如果您希望列出目录中的所有文件并每秒刷新一次列表,那么我认为这就是您要查找的内容:

    Shoes.app do
    
      stack do
        @btn_exit = button("Exit") {exit}
        @log = para "Logging goes here..."
      end
    
      every 1 do
        @log.text = Dir.entries('C:/Test').select{|file| file != "."*file.length}.join("\n")
      end
    
    end
    

    【讨论】:

    • 是的!非常感谢!
    • 由于 OP 正在编写一个鞋子应用程序,使用“动画”方法而不是“每个”方法会更符合逻辑
    【解决方案2】:

    您似乎需要every 方法(搜索它here)。 every 方法将每秒调用您的代码(或与您传入的秒数一样多)。

    应该像这样工作:

    every do
      # your appending code
    end
    

    (可能需要 1 作为参数,而不是 100% 确定 atm)

    【讨论】:

    • 感谢您的意见!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多