Pergunta

Estou usando pygtk com pil. Eu já descobri uma maneira de converter pil Images para gtk.gdk.Pixbufs. O que eu faço para exibir o pixbuf é eu criar um gtk.gdk.Image, e então use img.set_from_pixbuf. Agora quero desenhar algumas linhas para esta imagem. Aparentemente eu preciso de um Drawable fazer isso. Comecei a examinar os documentos, mas já tenho 8 a 10 janelas abertas e não está sendo simples.

Então - que mágica eu preciso digitar para obter um desenho representando minha imagem, desenhe algumas coisas para ele e depois transformá -la em um gdk.Image Então eu posso exibi -lo no meu aplicativo?

Foi útil?

Solução

Eu estava fazendo algo semelhante (desenhando com um GDK.Drawable) e descobri que o set_foreground não funciona. Para realmente desenhar usando a cor que eu queria, usei o seguinte:

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

Outras dicas

Oh meu Deus. Tão doloroso. Aqui está:

    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)

Na verdade, ele desenha um caixa eletrônico da linha preta, não vermelha, então tenho algum trabalho a fazer ...

Você já experimentou o contexto do Cairo? Desculpe, parece que não posso comentar sua postagem. Por isso, postei aqui.

Eu não tentei isso sozinho, mas acredito que o Cairo é seu amigo quando se trata de desenhar GTK. Você pode definir a fonte do seu contexto do Cairo como Pixbuf, então acho que isso é utilizável para você.

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)

Should do the trick.

You should connect to the expose-event (GTK 2) or draw (GTK 3) signal. In that handler, simply use image.window to get the widget's gtk.gdk.Window; this is a subclass of gtk.gdk.Drawable, so you can draw on it.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top