PyGtk3-Gtk.DrawingArea无法滚动

时间:2019-10-26 17:32:39

标签: python-3.x gtk3 viewport drawingarea gtkscrolledwindow

我的问题在于,我已将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和Cairo是个好主意的原因。

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

1 个答案:

答案 0 :(得分: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()