Графический интерфейс Ruby Shoes: постоянное обновление параграфов

Набор GUI для обуви для Ruby кажется действительно хорошим и простым способом добавления графического интерфейса в мои различные сценарии, но, ударившись головой об него, я не могу заставить абзац постоянно обновляться с помощью цикла.

Вот мой минимальный код, чтобы показать, что я пытаюсь сделать:

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

Но это просто блокирует навсегда, и мой графический интерфейс никогда не появляется, пока я не убью процесс ruby, когда появится вся моя информация.

Я попытался поместить цикл проверки "содержимого" и добавить его в отдельный класс, в его собственный цикл "стек" или "поток", попытался передать @log методу отдельного класса согласно заголовку "Перенаправление блока" в Shoes. Правила ( http://shoesrb.com/manual/Rules.html), все еще не радость после того, как попробовал все, что я могу придумать. Любые идеи, как я могу заставить это работать? Я думаю, у меня просто нет полного понимания того, как Shoes настраивает GUI.

2 ответа

Решение

Если вы хотите просмотреть все файлы в каталоге и обновлять список каждую секунду, то я думаю, что это то, что вы ищете:

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

Кажется, вам нужно every метод (ищите это здесь). Каждый метод будет вызывать ваш код каждую секунду (или столько секунд, сколько вы передаете).

Должно работать так:

every do
  # your appending code
end

(может потребоваться 1 в качестве аргумента, а не на 100% уверен)

Другие вопросы по тегам