2017-02-19 14 views
1

私はデスクトップの背景イメージを選択するためにRuby ShoesでGUIを構築しようとしています。私は私のアイデアの特定の部分で苦労しているので、私は問題の部分だけを説明するつもりです、残りはうまく動作します。ここでRuby:イメージが変更された後にイメージのパスを更新するには?

は私のルビーの靴アプリのコードです:

Shoes.app :title => "Images!" do 
    stack do 
     @img1 = image "desktop_pic", :width => 200, :height => 100 
     button "Change image", :margin => 25 do 
      @img1.path = "/home/njutik/preview_desktop_pic" 
     end 
    end 
end 

は、ここで私は私の靴アプリを起動したときの結果は次のようになります。バックグラウンドで

result_at_beginning

異なるルビーがあります新しい背景画像を生成し、それをpreview_desktop_picとして保存するスクリプト実行。

私はChange image - ボタンをクリックしたときので、@img1のパスを調整しますと、私は新しいイメージを参照してください。

result_after_clicking_change_button

これまでのところ大丈夫です。私の問題は、Change image - ボタン,をクリックすると何も起こりません。もちろん、その間にすでにので、新しいイメージpreview_desktop_pic私に新しい画像を表示する必要があり、私はChange image - ボタンを押すたびに実行されますが、何も起こりませんされているコードの行

@img1.path = "/home/njutik/preview_destkop_pic" 

あります。フォルダからpreview_desktop_picを削除してからChange imageボタンを押しても、変更は全くなく、最初にChage imageボタンをクリックした後に表示される画像は同じです。

私は間違っていますか?Change imageボタンを押すたびにShoesアプリに現在のpreview_desktop_picを表示させるにはどうすればよいですか?

ヒントは本当に素晴らしいでしょう。

更新:7studのコメントの後、ボタンのシングルトンメソッドを定義しようとしました。このように:

@change_image = button "Change image" 

def @change_image.click 
    @img1.path = "/home/njutik/preview_login_background" 
end 

@change_image.click 

しかし、それは役に立たなかった - 何も変わっていない。 私はこれを試しました:

def @img1.reload 
    @img1.path = "/home/njutik/preview_login_background" 
end 

button "Change image" do 
    @img1.reload 
end 

しかしこれも助けになりませんでした。シングルトンメソッドを定義することでキャッシュメモリを削除すると思っていました。

これ以上のヒントがあれば、本当に役に立ちます。

答えて

0

私はあなたが何か間違っているとは思わない。私はあなたが見ていることは、画像のキャッシュと関連していると考えています。 10個のウィンドウがすべて同じイメージを使用する場合、Shoesは各ウィンドウのディスクからファイルをフェッチしません(またはWebからファイルをダウンロードしません)。代わりに、Shoesは最初のウィンドウで使用されたイメージをキャッシュし、他のウィンドウがImageに同じパスを使用すると、Shoesはキャッシュからイメージを取得します。その結果、Imageのパスが変更されない場合、Shoesはキャッシュされたイメージを使用するように見えます。 Shoes内のImageにreload()メソッドがあって、Shoesがキャッシュを無視してイメージを再度取得するようにするといいでしょう。

アプリでは、画像のパスが"/desktop_pic"から"/home/njutik/preview_desktop_pic"に変更されるため、最初のボタンクリックが機能します。その後のクリックではイメージのパスは変更されません。

+0

ありがとうございました! 「画像を変更」ボタンをクリックするたびにキャッシュを消去する方法はありますか? – Njutik

関連する問題