DrawingArea Beispiel

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
[code]#!/usr/bin/env python
import this[/code]
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
[code]#!/usr/bin/env python
import this[/code]
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten