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

Posté par  .
Étiquettes : aucune
0
10
fév.
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()
  • # yop

    Posté par  (site web personnel) . Évalué à 2.

    ça veut juste dire que ton objet n' pas de méthode new_gc.

    Vois si il ne faut pas définir une méthode new_gc avant, qui défini par exemple le pinceau, la couleur etc.
  • # Attendre l'exposition

    Posté par  . Évalué à 1.

    Bonsoir,
    Je pense que le "show" n'est pas suffisant pour que le widget ait son attribut "window" initialisé, d'où le "None" renvoyé. Il faut sans doute passer par un slot ou une autre occasion de récupérer cette info quand elle est devenue disponible.
    Èqça.
  • # Déjà...

    Posté par  (site web personnel) . É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  . É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...

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.