PyGtk3 - Gtk.DrawingArea не прокручивается
Моя проблема заключается в том, что я заменил GtkImage на виджет GtkDrawingArea, и он не прокручивается, как это происходит с GtkImage.
Вот как я размещаю свои GtkImage и GtkDrawingArea (по одному).
- GtkScrolledWindow
- GtkViewPort
- GtkImage / GtkDrawingArea
- GtkViewPort
Я думал, этого было бы достаточно.
С помощью GtkImage: я прокручиваю по горизонтали и вертикали, а GtkImageViewport загружает часть PixBuf, которая должна отображаться, как вы можете видеть здесь:
С GtkDrawingArea: полосы прокрутки занимают всю доступную область, поэтому изображение не перемещается, как вы можете видеть здесь:
Если я изменю размер окна, появится часть изображения, которая не видна и должна быть видна при прокрутке:
ПРИМЕЧАНИЕ 1. Я хочу иметь возможность рисовать на изображении и работать с координатами пикселей, поэтому я думаю, что использование Gtk.DrawingArea и Cairo было хорошей идеей.
ПРИМЕЧАНИЕ 2: я пробовал как через Glade, так и через код с использованием scrolledwindow.add_with_viewport(drawing_area)
1 ответ
Как предположил Nico238, я явно не запрашивал область для DrawingArea. Теперь я установил размеры DrawingArea на основе изображения, которое рисую.
''' 'draw' callback method. '''
def __on_draw_drawing_area(self, widget, cairo_context):
if len(self.__store) > 0:
# The PixBuf to draw
image = self.__store_dictionary[self.__active_sample_id]['displayed_image']
# This was the missing line.
self.__w_drawing_area.set_size_request(image.get_width(), image.get_height())
# Add the image to the Cairo context and draw
Gdk.cairo_set_source_pixbuf(cairo_context, image, 0, 0)
cairo_context.paint()