Seite 1 von 1

DrawingArea Beispiel

Verfasst: Freitag 28. Januar 2005, 13:43
von Leonidas
Hallo!

Könnte mir jemand ein simples Beispiel posten wie mal auf der Drawing Area zeichnet? Ich bin scheinbar zu doof dazu :(

grüße,
Leonidas

Verfasst: Freitag 28. Januar 2005, 15:05
von Dookie
Hi Leonidas,

mein gtk-Beispiel -> http://python.sandtner.org/viewtopic.php?t=2502
und das aus dem Tutorial -> http://localhost/doc/python-gtk2-tutori ... thods.html

hast du dir schon angeschaut?

Du brauchst bevor du zeichnest einen Graphiccontext und gezeichnet wird dann in dem drawable - drawingarea.window.


Gruß

Dookie

Verfasst: Freitag 28. Januar 2005, 15:54
von Leonidas
Ja, habe ich beides angeschaut, aber werde daraus nicht wirklich schlau. Folgendes habe ich zusammengebastelt:

Code: Alles auswählen

#!/usr/bin/env python
# -*- encoding: latin-1 -*- 

import gtk
width = 100
height = 50

class TurtleWindow:
    def __init__(self):
        self.window = gtk.Window()
        self.window.connect("delete_event", self.delete_event)
        self.drawing_area = gtk.DrawingArea()
        self.drawing_area.set_size_request(width, height)
        self.drawing_area.connect("expose-event", self.expose_event)
        self.drawing_area.show()
        self.window.add(self.drawing_area)
        self.window.show()
        self.drawable = self.drawing_area.window
        
        self.gc = self.drawable.new_gc()
        color = gtk.gdk.Color(red=255, green=25552, blue=0)
        self.gc.set_foreground(color)
        self.gc.set_background(color)
    
    def delete_event(self, widget, event, data=None):
        gtk.main_quit()
        return False
    
    def expose_event(self, area, event):
        w, h = self.drawable.get_size()
        print w,h

if __name__ == '__main__':
    tw = TurtleWindow()
    gtk.main()
Ich habe zwar ein DrawingArea, auch mit einer Größe, nur die Farbe konnte ich noch setzen. Und wie ich dort einen Strich oder sonstwas hinmale weiß ich auch noch nicht.

Verfasst: Freitag 28. Januar 2005, 16:27
von Dookie
Hi Leonidas,

du musst auf den realize-event warten, erst dann existiert das Widget auch auf dem Bildschirm. Dann kannst du in das drawable das du über drawingarea.window erreichst etwas zeichnen.

Gruß

Dookie

Verfasst: Freitag 28. Januar 2005, 17:03
von Leonidas
Super, ich habe es geschafft. Danke Dookie! Jetzt werde ich sicher noch eine Menge Spaß damit haben :)

Jetzt nochmal ein funktionierendes Beispiel:

Code: Alles auswählen

#!/usr/bin/env python
# -*- encoding: latin-1 -*- 

import gtk
width = 100
height = 50

class TurtleWindow:
    def __init__(self):
        # Fenster erstellen
        self.window = gtk.Window()
        self.window.connect("delete_event", self.delete_event)
        
        # DrawingArea erstellen
        self.drawing_area = gtk.DrawingArea()
        self.drawing_area.set_size_request(width, height)
        self.drawing_area.connect("expose-event", self.expose_event)
        self.drawing_area.show()
        
        # Kombinieren
        self.window.add(self.drawing_area)
        self.window.show()
        
        # Drawable und GraphicsContext bekommen
        self.drawable = self.drawing_area.window
        self.gc = self.drawable.new_gc()
    
    def delete_event(self, widget, event, data=None):
        gtk.main_quit()
        return False
    
    def expose_event(self, area, event):
        w, h = self.drawable.get_size()
        #print w,h
        
        # Farben
        color = gtk.gdk.Color(red=255, green=25552, blue=0)
        self.gc.set_foreground(color)
        self.gc.set_background(color)
        
        # Punkt malen
        self.drawable.draw_point(self.gc, 10, 10)

if __name__ == '__main__':
    tw = TurtleWindow()
    gtk.main()
Damit wird ein kleines Fenster erstellt, in das ein kleiner Punkt reingemalt wird.