【问题标题】:Ruby: how to renew the path of an image after image has been changed?Ruby:图像更改后如何更新图像的路径?
【发布时间】:2017-07-08 17:12:19
【问题描述】:

我正在尝试使用 ruby​​ Shoes 构建一个 GUI 来为我的桌面选择背景图像。由于我正在努力解决我的想法的特定部分,我将只描述问题部分,其余部分都很好。

这是我的 ruby​​ Shoes 应用程序的代码:

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

以下是我启动我的 Shoes 应用时的结果:

result_at_beginning

在后台运行了一个不同的 ruby​​ 脚本,它生成一个新的背景图像并将其存储为preview_desktop_pic

所以当我点击Change image-按钮时,@img1 的路径得到调整,我看到了新图像:

result_after_clicking_change_button

到目前为止还不错。我的问题是,当我点击Change image-按钮再次时什么也没有发生。当然同时已经有一个新的图像preview_desktop_pic所以代码行

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

每次我按下Change image-按钮时都会执行一次,应该会显示一张新图片,但什么也没有发生。即使我从文件夹中删除preview_desktop_pic,然后按Change image-按钮,仍然没有任何变化,我看到的只是第一次单击Change image-按钮后显示的相同图片。

所以我的问题是:我做错了什么,如何让鞋子应用在每次按下Change image 按钮时显示当前的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

但这也无济于事。我认为通过定义单例方法我会删除缓存。

任何进一步的提示都会很有帮助。

【问题讨论】:

    标签: ruby image shoes


    【解决方案1】:

    我不认为你做错了什么。我认为您所看到的与图像缓存有关,Shoes 使用它来提高效率。如果十个窗口都使用相同的图像,Shoes 不会为每个窗口从磁盘获取文件(或从 Web 下载文件)。相反,Shoes 会缓存第一个窗口中使用的图像,当其他窗口使用相同路径的图像时,Shoes 从缓存中检索图像。因此,如果您的 Image 的路径未更改,则看起来 Shoes 使用了缓存的图像。如果 Shoes 中的 Image 有一个 reload() 方法会很好,这将迫使 Shoes 忽略缓存并重新获取图像。

    在您的应用中,第一个按钮点击有效,因为图像的路径从 "/desktop_pic" 更改为 "/home/njutik/preview_desktop_pic"。后续点击不会改变图像的路径。

    【讨论】:

    • 谢谢!每次点击“更改图片”按钮时,有没有办法清除缓存?
    【解决方案2】:

    要更改图像,新图像的名称必须与前一个不同。我不知道为什么,但它对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-20
      相关资源
      最近更新 更多