Графический интерфейс 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% уверен)