Thanks. That worked very well.
Thanks for taking the time to respond.
In celebration, I have added a green rectangle.

Here is the working code:

import pygtk
pygtk.require("2.0")
import gtk
from gtk import Window, Button

class Base:
    def handle_color_change(self, widget, data) :
        self.color = data
        if self.color == "Red":
            gdk_color = gtk.gdk.color_parse("Red")
        elif self.color == "Green":
            gdk_color = gtk.gdk.color_parse("Green")
        else:
            gdk_color = gtk.gdk.color_parse("Blue")
            style = self.area.get_style().copy()
            style.bg[gtk.STATE_NORMAL] = gdk_color
            self.area.set_style(style)
        self.area.queue_draw()

    def __init__(self):
        self.color = None
        self.window = Window(gtk.WINDOW_TOPLEVEL)
            self.window.connect("destroy", lambda w: gtk.main_quit())

            self.mainPane = gtk.VBox(False, 0)
        self.window.add(self.mainPane)
        # create the toolbar
            self.toolbar = gtk.HBox(False, 0)
        self.green = Button('Green')
        self.red = Button ('Red')
        self.toolbar.pack_start(self.green, True, True, 0)
        self.toolbar.pack_start(self.red, True, True, 0)
        self.mainPane.pack_start(self.toolbar, True, True, 0)
        self.red.connect("clicked", self.handle_color_change, "Red")
        self.green.connect("clicked", self.handle_color_change, "Green")


        #Create the drawing area
            self.area = gtk.DrawingArea()
            self.area.set_size_request(400, 300)
        self.area.connect("expose-event", self.area_expose)
        self.mainPane.pack_start(self.area, True, True, 0)

        self.window.show_all()

    def area_expose(self, area, event):
        print ("area exposed")
            gc = self.area.get_style().fg_gc[gtk.STATE_NORMAL]
        gc=self.area.window.new_gc()

                gdk_color = gc.get_colormap().alloc_color("Green")
        gc.set_foreground(gdk_color)
        #draw_rectangle(gc, filled, x, y, width, height)
        self.area.window.draw_rectangle(gc, True, 0, 0, 80, 70)


                gdk_color = gc.get_colormap().alloc_color("Blue")
        gc.set_foreground(gdk_color)
        self.area.window.draw_line(gc,  0, 0, 80, 70)

        return False

    def main(self):
        gtk.main()

if __name__ == "__main__":
    base = Base()
    base.main()


And now I do a victory dance... hoot hoot! hoot hoot! HOOT!
Mdd dada do do doh mmm dada doh doh! bogaboga!


On Wed, Sep 2, 2009 at 8:16 PM, John Finlay <fin...@moeraki.com> wrote:

> Rick Hightower wrote:
>
> <snip>
>
>> Here is the full program. It changes the background color and redraws.
>> I need to be able to draw different color lines.
>>
>> import pygtk
>> pygtk.require("2.0")
>> import gtk
>> from gtk import Window, Button
>>
>> class Base:
>> def handle_color_change(self, widget, data) :
>> self.color = data
>> if self.color == "Red":
>> gdk_color = gtk.gdk.color_parse("Red")
>> elif self.color == "Green":
>> gdk_color = gtk.gdk.color_parse("Green")
>> else:
>> gdk_color = gtk.gdk.color_parse("Blue")
>>         style = self.area.get_style().copy()
>>         style.bg <http://style.bg>[gtk.STATE_NORMAL] = gdk_color
>>
>>         self.area.set_style(style)
>> self.area.queue_draw()
>>
>> def __init__(self):
>> self.color = None
>> self.window = Window(gtk.WINDOW_TOPLEVEL)
>>         self.window.connect("destroy", lambda w: gtk.main_quit())
>>
>>         self.mainPane = gtk.VBox(False, 0)
>> self.window.add(self.mainPane)
>> # create the toolbar
>>         self.toolbar = gtk.HBox(False, 0)
>> self.green = Button('Green')
>> self.red = Button ('Red')
>> self.toolbar.pack_start(self.green, True, True, 0)
>> self.toolbar.pack_start(self.red, True, True, 0)
>> self.mainPane.pack_start(self.toolbar, True, True, 0)
>> self.red.connect("clicked", self.handle_color_change, "Red")
>> self.green.connect("clicked", self.handle_color_change, "Green")
>>
>>
>> #Create the drawing area
>>         self.area = gtk.DrawingArea()
>>         self.area.set_size_request(400, 300)
>> self.area.connect("expose-event", self.area_expose)
>> self.mainPane.pack_start(self.area, True, True, 0)
>>
>> self.window.show_all()
>>
>> def area_expose(self, area, event):
>> print ("area exposed")
>>
> vvvvv delete vvvvvv
>
>>     gc = self.area.get_style().fg_gc[gtk.STATE_NORMAL]
>> gdk_color = gtk.gdk.color_parse("Blue")
>> gc.get_colormap().alloc_color(gdk_color)
>>
> ^^^^^^ delete ^^^^^^^
>
> vvvvvvvvv add vvvvvvvvv
>
>                  gc=self.area.window.new_gc()
>                  gdk_color = gc.get_colormap().alloc_color("Blue")
>
> ^^^^^^ add ^^^^^^
>
>> gc.set_foreground(gdk_color)
>>   self.area.window.draw_line(gc, 0, 0, 80, 70)
>> return False
>>
>> def main(self):
>> gtk.main()
>>
>> if __name__ == "__main__":
>> base = Base()
>> base.main()
>>
>>
> You could create the GC  and color up front and reuse it in the expose
> event handler to simplify.
>
> john
>
_______________________________________________
pygtk mailing list   pygtk@daa.com.au
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://faq.pygtk.org/

Reply via email to