gpt4 book ai didi

ruby - 如何使用 Shoes 中的进度条?

转载 作者:太空宇宙 更新时间:2023-11-03 17:13:27 24 4
gpt4 key购买 nike

好吧,我对 Shoes 中的很多东西都不是很确定,但到目前为止,我的试错法在这方面让我失败了。

我有一个类执行某种需要一段时间的计算,我想抛出一个进度条供用户在完成时查看。如果通过一个 block ,我的计算密集型方法会产生其完成百分比:

class MathyStuff

def initialize()
end

## Some expensive, time consuming method which yields it's percent complete
def expensiveMethod(&block)
0.upto(100) do |i|
0.upto(100000) do |j|
k = j;
end

yield i.to_f/100;
end
end

end

以下是我在鞋子里说的话:

require 'MathyStuff.rb'

Shoes.app do

@myMathyStuff = MathyStuff.new();

button("Do expensive mathy thing...") do
window() do
@progress = progress();
@myMathyStuff.expensiveMethod() {|percent| @progress.fraction = percent;}
end
end

end

但是好像不行。我尝试过使用/不使用窗口调用,我尝试过各种方式的 animate(),我什至尝试调用 Thread.new 并将其传递给窗口 block ,让它们通过 Shoes.APPS()[0].get 进行交谈/setPercent 方法;似乎没有什么能正常工作。

也许我没有按照预期的方式使用进度条。那么,进度条还有什么用呢? ;-)

最佳答案

首先,在 Shoes 中的两个窗口之间共享数据是一件非常痛苦的事情。我不推荐它。相反,隐藏第一个窗口的内容并在其位置显示进度条。

其次,我们将扩展 MathyStuff 以将其从处理 block 切换为提供百分比属性,以便我们可以从动画线程访问它:

class MathyStuff
attr_accessor :percent

def expensiveMethodWrapper
@percent = 0.0
expensiveMethod {|x| @percent = x}
end
end

Shoes.app do

@myMathyStuff = MathyStuff.new();
@window_slot = stack do
button("Do expensive mathy thing...") do
@window_slot.toggle
@progress_slot = flow do
@progress = progress :width => 1.0
end
end
Thread.new do
@myMathyStuff.expensiveMethodWrapper
end
@animate = animate do
@progress.fraction = @myMathyStuff.percent
if @myMathyStuff.percent == 1.0
@progress_slot.remove
@window_slot.toggle
@animate.stop
end
end
end
end

关于ruby - 如何使用 Shoes 中的进度条?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/813542/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com