3

ボタンをクリックすると、白い円が入った黒い四角形を描画する Python プログラムを作成しました。と を使用Gtk.DrawingAreacairo.ImageSurfaceます。コードは次のとおりです。

class App:

    def __init__(self, width, height):

        self.surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height)

        # Builder
        self.builder = Gtk.Builder()
        self.builder.add_from_file('ventana.glade')
        go = self.builder.get_object

        # Widgets
        self.window      = go('window')
        self.drawingarea = go('drawingarea')
        self.button      = go('button')

        signals = {
            'gtk_main_quit'    : Gtk.main_quit,
            'draw'             : self.draw
        }

        self.builder.connect_signals(signals)
        self.window.show_all()


    def draw(self, widget):
        context = self.drawingarea.get_window().cairo_create()
        context.set_source_surface(self.surface)

        context.set_source_rgba(0.0, 0.0, 0.0, 1.0)
        context.rectangle(0, 0, self.surface.get_width(), self.surface.get_height())
        context.fill()

        context.translate(10, 10)
        context.arc(0, 0, 10, 0, 2 * pi)
        context.set_source_rgba(1.0, 1.0, 1.0, 1.0)
        context.fill()

次のウィンドウが表示されます。

ここに画像の説明を入力

正常に動作しますが、その画像のピクセルの RGB 値を取得する必要があるため、実行してみmap(ord, self.surface.get_data())ましたが、ゼロのリストが表示されます。

ピクセルの RGB のリストを取得するにはどうすればよいですか?

また、別の問題があります。ウィンドウを最小化するか、別のウィンドウに変更すると、描画が消去されます。これを回避することは可能ですか?

4

2 に答える 2

0

色の取得についてはわかりませんが、描画については、ウィンドウを「configure-event」(ウィンドウの状態が変更されたイベント)に接続してから、drawingarea.queue_draw()を呼び出します

于 2015-06-06T09:42:52.800 に答える