Ich versuche eine GUI mit Ruby Shoes zu erstellen, um ein Hintergrundbild für meinen Desktop auszuwählen. Während ich mit einem bestimmten Teil meiner Idee streite, werde ich nur den Problemteil beschreiben, der Rest funktioniert gut.Ruby: Wie man den Pfad eines Bildes erneuert, nachdem das Bild geändert wurde?
Hier ist der Code meines Rubin Schuhe App:
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
Hier ist, was das Ergebnis aussieht, wenn ich meine Schuhe app starten:
Im Hintergrund eine andere Rubin Skript läuft, das ein neues Hintergrundbild erzeugt und es als preview_desktop_pic
speichert.
Also, wenn ich die Change image
-Schaltfläche klicken, wird der Pfad von @img1
eingestellt, und ich sehe das neue Bild:
result_after_clicking_change_button
, die so weit in Ordnung. Mein Problem ist, dass nichts passiert, wenn ich auf Change image
-button wieder klicke. Natürlich in der Zwischenzeit gibt es bereits ein neues Bild preview_desktop_pic
so
@img1.path = "/home/njutik/preview_destkop_pic"
die Codezeile, die jedes Mal, wenn ich die Change image
-Schaltfläche drücken ausgeführt wird, sollte mir ein neues Bild zeigen, aber nichts passiert. Auch wenn ich die preview_desktop_pic
aus dem Ordner lösche und dann die Change image
-Schaltfläche drücke, gibt es immer noch keine Änderung und alles, was ich sehe, ist das gleiche Bild, das nach dem ersten Klick auf den Chage image
-Button angezeigt wird.
Also meine Frage ist: Was mache ich falsch und wie kann ich die Shoes App zeigen die aktuelle preview_desktop_pic
jedes Mal, wenn ich die Change image
-Taste drücken?
Alle Hinweise wären wirklich toll!
Update: Nach dem Kommentar von 7stud habe ich versucht, eine Singleton-Methode für die Schaltfläche zu definieren. Gefällt mir:
Aber das hat nicht geholfen - nichts hat sich geändert. Dann habe ich versucht, dies:
def @img1.reload
@img1.path = "/home/njutik/preview_login_background"
end
button "Change image" do
@img1.reload
end
Aber dies auch nicht helfen. Ich dachte, dass ich mit dem Definieren von Singleton-Methoden den Cache-Speicher löschen würde.
Weitere Hinweise wären sehr hilfreich.
Vielen Dank! Gibt es eine Möglichkeit, den Cache jedes Mal zu löschen, wenn ich auf "Bild ändern" klicke? – Njutik