Автоматическое масштабирование изображения при изменении размера с помощью (Py) GTK

У меня есть виджет GtkImage в окне с изменяемым размером и ссылка GdkPixBuf , в которой хранится нужное мне изображение чтобы заполнить GtkImage .

Я могу масштабировать GdkPixBuf , чтобы заполнить виджет GtkImage , используя этот метод:

def update_image(self, widget=None, data=None):
    # Get the size of the source pixmap
    src_width, src_height = self.current_image.get_width(), self.current_image.get_height()

    # Get the size of the widget area
    widget = self.builder.get_object('image')
    allocation = widget.get_allocation()
    dst_width, dst_height = allocation.width, allocation.height

    # Scale preserving ratio
    scale = min(float(dst_width)/src_width, float(dst_height)/src_height)
    new_width = int(scale*src_width)
    new_height = int(scale*src_height)
    pixbuf = self.current_image.scale_simple(new_width, new_height, gtk.gdk.INTERP_BILINEAR)

    # Put the generated pixbuf in the GtkImage widget
    widget.set_from_pixbuf(pixbuf)

Когда я вызываю update_image вручную работает как положено. Теперь я хочу, чтобы масштабирование происходило автоматически при изменении размера виджета GtkImage. Лучшее решение, с которым я пришел, - это привязать метод update_image к событию configure-event GTK окна. После каждого изменения размера окна изображение действительно правильно масштабируется. Однако у меня есть две проблемы с этим решением:

  • Я могу только увеличить окно. После масштабирования изображения GTK не позволит мне уменьшить размер окна, потому что окно не может быть меньше, чем его виджеты. Я понимаю, почему это работает так, но я не знаю, как изменить это поведение.
  • Возможно, это не проблема, но я бы предпочел событие из виджета GtkImage вместо окна верхнего уровня.

Прошу прощения за долгое объяснение такой тривиальной проблемы, надеюсь, вы сможете мне помочь.

6
задан serge_gubenko 9 February 2011 в 04:27
поделиться