Frage

Ich benutze Pygtk mit Pil. Ich habe bereits einen Weg herausgefunden, um PIL zu konvertieren Images zu gtk.gdk.Pixbufs. Was ich tue, um den Pixbuf anzuzeigen, ist, ich erstelle a gtk.gdk.Image, und dann verwenden img.set_from_pixbuf. Ich möchte jetzt ein paar Zeilen auf dieses Bild zeichnen. Anscheinend brauche ich eine Drawable das zu tun. Ich habe angefangen, die Dokumente durchzuschauen, aber ich habe bereits 8-10 Fenster geöffnet und es ist überhaupt nicht einfach.

Also - für welche Magie muss ich eingeben, um ein Zeichnung, das mein Bild darstellt, einige Dinge darauf zeichnen und es dann in eine verwandeln gdk.Image Also kann ich es in meiner App anzeigen?

War es hilfreich?

Lösung

Ich habe etwas Ähnliches getan (zu einem gdk.Drawable) und fand, dass set_forground nicht funktioniert. Um mit der von mir gewünschten Farbe tatsächlich zu zeichnen, habe ich Folgendes verwendet:

# Red!
gc.set_rgb_fg_color(gtk.gdk.Color(0xff, 0x0, 0x0))

Andere Tipps

Ach du lieber Gott. So schmerzhaft. Hier ist es:

    w,h = pixbuf.get_width(), pixbuf.get_height()
    drawable = gtk.gdk.Pixmap(None, w, h, 24)
    gc = drawable.new_gc()
    drawable.draw_pixbuf(gc, pixbuf, 0, 0, 0, 0, -1, -1)

    #---ACTUAL DRAWING CODE---
    gc.set_foreground(gtk.gdk.Color(65535, 0, 0))
    drawable.draw_line(gc, 0, 0, w, h)
    #-------------------------

    cmap = gtk.gdk.Colormap(gtk.gdk.visual_get_best(), False)
    pixbuf.get_from_drawable(drawable, cmap, 0, 0, 0, 0, w, h)

Es zeichnet tatsächlich eine schwarze Linie ATM, keine rote, also habe ich noch einige Arbeiten zu tun ...

Haben Sie den Kairo -Kontext ausprobiert? Entschuldigung, ich scheine Ihren Beitrag nicht zu kommentieren. Daher habe ich es hier gepostet.

Ich habe das nicht selbst ausprobiert, aber ich glaube, dass Kairo dein Freund ist, wenn es darum geht, GTK zu zeichnen. Sie können die Quelle Ihres Kairo -Kontexts als Pixbuf einstellen, daher denke ich, dass dies für Sie verwendet werden kann.

gdkcairocontext

image = gtk.Image()
pixmap,mask = pixbuf.render_pixmap_and_mask() # Function call
cm = pixmap.get_colormap()
red = cm.alloc_color('red')
gc = pixmap.new_gc(foreground=red)
pixmap.draw_line(gc,0,0,w,h)
image.set_from_pixmap(pixmap,mask)

Sollte den Trick machen.

Sie sollten sich mit dem verbinden expose-event (GTK 2) oder draw (GTK 3) Signal. In diesem Handler einfach benutzen image.window Um das Widget zu bekommen gtk.gdk.Window; Dies ist eine Unterklasse von gtk.gdk.Drawable, Sie können darauf zurückgreifen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top