0

I am trying to display both an image and a box with an Entry widget. I can do that, but the window is so large that the widget at the bottom is mostly out of view. I have tried several calls to set the window's size or unmaximize it, but they seem to have no effect. I determined that the problem only occurs when the image is large, but still wonder how to display a large image in a resizable window or, for that matter, to make any changes to the window's geometry from code. All the function call I tried seem to have no effect.

Here is my code:

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
from gi.repository import GdkPixbuf

from urllib.request import urlopen
class Display(object):

    def __init__(self):
        self.window = Gtk.Window()
        self.window.connect('destroy', self.destroy)
        self.window.set_border_width(10)

        # a box underneath would be added every time you do 
        # vbox.pack_start(new_widget)

        vbox = Gtk.VBox()
        self.image = Gtk.Image()
        response = urlopen('http://1.bp.blogspot.com/-e-rzcjuCpk8/T3H-mSry7PI/AAAAAAAAOrc/Z3XrqSQNrSA/s1600/rubberDuck.jpg').read()

        pbuf = GdkPixbuf.PixbufLoader()
        pbuf.write(response)
        pbuf.close()
        self.image.set_from_pixbuf(pbuf.get_pixbuf())

        self.window.add(vbox)
        vbox.pack_start(self.image, False, False, 0)
        self.entry = Gtk.Entry()
        vbox.pack_start(self.entry, True,True, 0)

        self.image.show()
        self.window.show_all()

    def main(self):
        Gtk.main()

    def destroy(self, widget, data=None):
        Gtk.main_quit()

a=Display()
a.main()
Anna Naden
  • 91
  • 1
  • 9

1 Answers1

0

Most of the posted information seems to pertain to Gtk2 rather than Gtk3, but there is a solution: to use a pix buf loader and set the size:

from gi.repository import Gtk, Gdk, GdkPixbuf

#more stuff

path = config['DEFAULT']['datasets']+'working.png'
with open(path,'rb') as f:
    pixels = f.read()
loader = GdkPixbuf.PixbufLoader()
loader.set_size(400,400)
loader.write(pixels)
pb = GdkPixbuf.Pixbuf.new_from_file(path)
self.main_image.set_from_pixbuf(loader.get_pixbuf())
loader.close()
Anna Naden
  • 91
  • 1
  • 9