我正在用ruby创建一个图像幻灯片,使用gtk pixbuf来加载图像。我是ruby & GTK的新手,这可能是个愚蠢的问题。
目前图像更改是链接到图形用户界面的button_press_event,我希望他们自动更改/refresh的基础上设置的时间,如幻灯片或动画。我使用gif方法观看了gtk动画,但我想使用单独的jpeg文件内联序列,这样我就可以设置放映幻灯片的时间。循环浏览完所有图像后,GUI应显示用于重放或退出的按钮。(我还没有使用@time,它只是为了可能),谢谢你的建议;
require 'gtk2'
class Pics
attr_accessor :pile, :picindex, :imgLoaded, :image, :box, :window, :time
def initialize
@window = Gtk::Window.new()
@window.signal_connect("destroy"){Gtk.main_quit}
pic1 = "1.jpg"
pic2 = "2.jpg"
pic3 = "3.jpg"
pic4 = "4.jpg"
@pile = [pic1, pic2, pic3, pic4]
@picindex = 0
self.getImage
@box = Gtk::EventBox.new.add(@image)
@time = true
end
def nuImage
@box.remove(@image)
@picindex = @picindex + 1
@picindex = 0 if @picindex == @pile.length
self.getImage
@box.add(@image)
@box.show
end
def getImage
@imgLoaded = @pile[@picindex]
img = Gdk::Pixbuf.new(@imgLoaded, 556, 900)
@image = Gtk::Image.new(img)
@image.show
end
end # class Pics
pics = Pics.new
pics.box.signal_connect("button_press_event"){pics.nuImage}
pics.window.set_default_size(556, 900)
pics.window.add(pics.box)
pics.window.show_all
Gtk.main发布于 2014-07-17 13:37:53
使用GLib.timeout_add ()或GLib.timeout_add_seconds ()。如果不想使用它,则返回False anymore.read GLib文档,部分:主事件循环
发布于 2016-07-14 14:31:16
这是一个解决方案:
def start_button__clicked(but)
@thread = Thread.new {
loop do
next_button__clicked
sleep(2)
end
end
def stop_button__clicked(but)
@thread.kill
end这就是我在visual ruby中的做法。这基本上是一样的。
您只需要创建一个带有名为"start_button“和"stop_button”等按钮的表单。
发布于 2014-08-07 12:55:51
下面的代码是一个实现:
GLib::Timeout.add(1000) do
pics.nuImage if pics.time
true
end
pics.window.signal_connect("key_press_event") do |_window, event|
case event.keyval
when Gdk::Keyval::GDK_KEY_space
pics.time = !pics.time
end
end更多细节:http://ruby-gnome2.sourceforge.jp/hiki.cgi?GLib%3A%3ATimeout
https://stackoverflow.com/questions/24769039
复制相似问题