Faire un don ! | | style | statistiques | contactez-nous | plan | lettre d'information

Programmation.python : PyGtk - dessiner dans une fenêtre

Posté par thor_tue () le 10 février 2008

Salut, je débute sous PyGtk...

Voilà une question très simple à propos des "DrawingArea"

À l'exécution du code suivant, python renvoie :



AttributeError: 'NoneType' object has no attribute 'new_gc'



Je suppose un problème d'ordre de déclaration, qu'en est-il ?

Ça paraît assez simple dans la page suivante, pourtant :

http://www.pygtk.org/pygtk2tutorial/ch-DrawingArea.html

Merci.



#!/usr/bin/env python



import pygtk

pygtk.require('2.0')

import gtk



class MainWindows:



def __init__(self):



window = gtk.Window(gtk.WINDOW_TOPLEVEL)



drawing_area = gtk.DrawingArea()

drawing_area.show()

drawable = drawing_area.window

gc = drawable.new_gc()

window.show_all()



def main():



gtk.main()

return 0



if __name__ == "__main__":



MainWindows()

main()

> Lire le message (4 commentaires, moyenne: 1,5).  

Vous avez demandé le commentaire #904076.

Déjà...

Posté par liberforce (Jabber id, page perso, ) le 11/02/2008 à 14:30. (lien). Évalué à 2.

Commence par rajouter un window.add (drawing_area), parce que sinon tu ne vas pas dessiner grand chose :-)

Ensuite, il faut te connecte au signal "expose-event", et que tu mettes ton code qui dessine dans cette zone dans la callback de gestion de cet évènement.

Exemple en C:
gboolean
on_drawing_area_expose_event (GtkWidget *widget,
GdkEventExpose *event,
gpointer data)
{
GdkPixbuf *pixbuf = data;
gdk_draw_pixbuf (widget->window,
widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
pixbuf,
0, 0, 0, 0,
-1, -1,
GDK_RGB_DITHER_NONE,
0, 0);
return TRUE;
}


Tu as la doc python sur:
http://www.pygtk.org/docs/pygtk/class-gtkdrawingarea.html

Tu peux aussi regarder comment c'est fait en C dans l'exemple livré avec GTK: lance gtk-demo, et regarde l'exemple "Drawing Area". Tu auras un exemple exécutable avec son code source détaillé. Si tu veux juste le source, regarde ici:
http://svn.gnome.org/viewvc/gtk%2B/trunk/demos/gtk-demo/draw(...)

  • [^]*

    Posté par thor_tue () le 13/02/2008 à 12:26. (lien). Évalué à 1.

    Merci pour vos réponses.

    Ok pour le "window.add", c'est en épurant mon exemple
    que je l'ai effacé.
    Je pense effectivement que c'est plus rapide d'utiliser
    directement la documentation GTK en C...