У меня есть виджет 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 окна. После каждого изменения размера окна изображение действительно правильно масштабируется. Однако у меня есть две проблемы с этим решением:
Прошу прощения за долгое объяснение такой тривиальной проблемы, надеюсь, вы сможете мне помочь.