PyGtk3 - Gtk.DrawingArea не прокручивается

Моя проблема заключается в том, что я заменил GtkImage на виджет GtkDrawingArea, и он не прокручивается, как это происходит с GtkImage.

Вот как я размещаю свои GtkImage и GtkDrawingArea (по одному).

  • GtkScrolledWindow
    • GtkViewPort
      • GtkImage / GtkDrawingArea

Я думал, этого было бы достаточно.

С помощью 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()
Другие вопросы по тегам