pythongtkgtk3gdkpixbuf

How to change the image shown by a GtkImage?


in my program I would like to change an image by clicking a button but I can not find the function

class TestGdkPixbuf(Gtk.Window):
    Cover= "image.png"
    Cover2= "image2.png"

    def __init__(self):
        Gtk.Window.__init__(self, title="TestGdkPixbuf")

        mainLayout = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6)


        self.image = GdkPixbuf.Pixbuf.new_from_file_at_size(self.Cover, 250, 250)
        image_renderer = Gtk.Image.new_from_pixbuf(self.image)

        button = Gtk.Button(label='Change')
        button.connect('clicked', self.editPixbuf)

        mainLayout.pack_start(image_renderer, True, True, 0)
        mainLayout.pack_start(button, True, True, 0)

        self.add(mainLayout)

    def editPixbuf(self, button):
        self.image = GdkPixbuf.Pixbuf.new_from_file_at_size(self.Cover2, 250, 250)
        print(self.Cover2)

Thank you very much for your help


Solution

  • When you've created the Gtk.Image, image_renderer, you supplied a pixbuf, self.image.

    Then on your button callback, you did load an image into a pixbuf but did not update the image_renderer with the new pixbuf. You should use Gtk.Image set_from_pixbuf.

    Try:

    class TestGdkPixbuf(Gtk.Window):
        Cover= "image.png"
        Cover2= "image2.png"
    
        def __init__(self):
            Gtk.Window.__init__(self, title="TestGdkPixbuf")
    
            mainLayout = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6)
    
    
            self.image = GdkPixbuf.Pixbuf.new_from_file_at_size(self.Cover, 250, 250)
            self.image_renderer = Gtk.Image.new_from_pixbuf(self.image)
    
            button = Gtk.Button(label='Change')
            button.connect('clicked', self.editPixbuf)
    
            mainLayout.pack_start(image_renderer, True, True, 0)
            mainLayout.pack_start(button, True, True, 0)
    
            self.add(mainLayout)
    
        def editPixbuf(self, button):
            self.image = GdkPixbuf.Pixbuf.new_from_file_at_size(self.Cover2, 250, 250)
            self.image_renderer.set_from_pixbuf (self.image)
            print(self.Cover2)