PyGtk3 - Gtk.DrawingArea 不会滚动

PyGtk3 - Gtk.DrawingArea won't scroll

我的问题在于我用 GtkDrawingArea 小部件替换了 GtkImage,但它没有像 GtkImage 那样滚动。

这就是我放置 GtkImage 和 GtkDrawingArea 的方式(一次放置一个)。

我认为这就足够了。

使用 GtkImage: 我水平和垂直滚动,GtkImageViewport 加载应该显示的 PixBuf 部分,如您在此处看到的:

使用 GtkDrawingArea: 滚动条占据所有可用区域,所以图像 不会移动 ,如您所见这里:

如果我调整 window 的大小,出现滚动时不可见但应该可见的图像部分:

注意 1: 我希望能够在图像上绘图并使用像素坐标,这就是为什么我认为使用 Gtk.DrawingArea 和 Cairo 是个好主意.

注意 2: 我已经通过 Glade 和使用 scrolledwindow.add_with_viewport(drawing_area)

的代码进行了尝试

正如 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()