0

私の問題は、GtkDrawingArea ウィジェットの GtkImage を置き換えたことと、GtkImage のようにスクロールしないことです。

これは、GtkImage と GtkDrawingArea (一度に 1 つずつ) の両方を配置する方法です。

  • GtkScrolledWindow
    • GtkViewPort
      • GtkImage / GtkDrawingArea

これで十分だろうと思いました。

GtkImage の場合:水平方向と垂直方向にスクロールすると、GtkImageViewport が表示すべき PixBuf の一部を読み込みます。

ここに画像の説明を入力

GtkDrawingArea の場合:スクロール バーが使用可能なすべての領域を占有するため、画像は移動しません。

ここに画像の説明を入力

ウィンドウのサイズを変更すると、スクロール時に表示されず、表示されるはずの画像の部分が表示されます。

ここに画像の説明を入力

注1 :画像に描画してピクセル座標を操作できるようにしたいので、Gtk.DrawingAreaとCairoを使用するのは良い考えだと思います。

注2: 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 に答える