PyGtk3 - Gtk.DrawingArea не будет прокручиваться - PullRequest
0 голосов
/ 26 октября 2019

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

Это - то, как я размещаю и мои GtkImage и GtkDrawingArea (по одному).

  • GtkScrolledWindow
    • GtkViewPort
      • GtkImage / GtkDrawingArea

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

С помощью GtkImage: Я прокручиваю по горизонтали и вертикали, и GtkImageViewport загружает часть PixBuf, которая должна отображаться, как вы можете видеть здесь:

enter image description here

С помощью GtkDrawingArea: полосы прокрутки занимают всю доступную область, поэтому изображение не будет двигаться , как вы можете видеть здесь:

enter image description here

Если изменить размер окна, появится часть изображения, которая не видна и должна быть видимой при прокрутке:

enter image description here

ПРИМЕЧАНИЕ1: Я хочу иметь возможность рисовать на изображении и работать с координатами пикселей, поэтому я думаю, что с помощью Gtk.DrawingArea иКаир был хорошей идеей.

ПРИМЕЧАНИЕ2: Я пробовал как через Glade, так и через код с использованием scrolledwindow.add_with_viewport (drawing_area)

1 Ответ

1 голос
/ 30 октября 2019

Как подсказал Nico238, я не запрашивал явно область рисования. Теперь я установил размеры 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()
...