0

我的问题在于我已经将 GtkImage 替换为 GtkDrawingArea 小部件,并且它不像 GtkImage 那样滚动。

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

  • GtkScrolledWindow
    • GtkViewPort
      • GtkImage / GtkDrawingArea

我以为这已经足够了。

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

在此处输入图像描述

使用 GtkDrawingArea:滚动条占据所有可用区域,因此图像不会移动,如您在此处看到的:

在此处输入图像描述

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

在此处输入图像描述

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

NOTE2:我已经通过 Glade 和使用 scrolledwindow.add_with_viewport(drawing_area) 的代码进行了尝试

4

1 回答 1

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()
于 2019-10-30T15:24:15.510 回答