[pygtk] Trying to change the "pen color" just before I draw a line
Rick Hightower
richardhightower at gmail.com
Fri Sep 4 04:09:08 WST 2009
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 <finlay at 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.daa.com.au/pipermail/pygtk/attachments/20090903/4f7811e6/attachment.htm
More information about the pygtk
mailing list