У вас жесткий цикл, да еще и со слипом внутри.
Любые фреймворки типа WxRuby основаны на событиях. И любое взаимодействие с интерфейсом обрабатывается в глобальном цикле обработки событий.
Если представить, что происходит в вашем случае, то при обработке события нажатия на кнопку запускается ваш цикл, который захватывает управление и отдает только после прохождения всего цикла целиком, после чего управление возвращается обратно в основной цикл обработки событий и текстовый элемент обновляется.
Для того, чтобы заработало конкретное данное решение, вам вместо sleep нужно сделать цикл, который будет крутиться одну секунду и внутри которого будет выполняться обработка событий (
http://wxruby.rubyforge.org/doc/app.html#App_dispatch)
Можно попробовать
def print
Thread.new do
5.times{| i |
# Вывод данных в интерпретатор
p i
# Вывод данных в текстовое поле
text.value += i.to_s
sleep 1
}
end
end
P.S. Ну и тег странный, конечно