Hi, everyone. I was using gnome-python pre2.0 for some time, with great success. Unfortunately things seem to have changed for gnome-python 2.0 and now my programs don't run.
I've already done the various conversions needed to support modules moving around and being renamed. What I'm now stuck on is trying to add a line to a gnome canvas object. I get an incomprehensible error, and I've no way to determine what's wrong. I've attached the program. The problem is in the call to 'build' within the WorldObject. The first add() statement dies like this: (tinydemo.py:5601): GnomeCanvas-CRITICAL **: file gnome-canvas.c: line 198 (gnome_canvas_item_new): assertion `g_type_is_a (type, gnome_canvas_item_get_type ())' failed Traceback (most recent call last): File "./tinydemo.py", line 106, in ? st.populate() File "./tinydemo.py", line 89, in populate self.element = WorldObject(self.canvas,200,200) File "./tinydemo.py", line 16, in __init__ self.build() File "./tinydemo.py", line 67, in build fill_color='darkgrey') RuntimeError: could not create canvas item object Can anyone either shed some light, or point me to some documentation to show how to add canvas objects in 2.0? I originally wrote this based on the gnome-python example, but I can't find a 2.0 equivalent of that example. I've attached my program for reference. Thanks in advance! cf
#!/usr/bin/env python import gtk, gtk.gdk, gnome.ui, gnome.canvas class WorldObject: def __init__(self,canvas,x,y): self.myobj = None self.myline = None self.mylinepoints = [x,y,x,y] self.canvas = canvas self.width = 20 self.height = 20 self.x = x self.y = y self.lmb_pressed = 0 self.build() def set_line_endpoint(self,x,y): self.mylinepoints[0] = x self.mylinepoints[1] = y self.myline.set(points=self.mylinepoints) def item_event(self, widget, event=None): if event.type == gtk.gdk.BUTTON_RELEASE: if event.button == 1: self.lmb_pressed = 0 self.myline.hide() return gtk.TRUE elif event.type == gtk.gdk.BUTTON_PRESS: if event.button == 1: self.lmb_pressed = 1 self.set_line_endpoint(event.x,event.y) self.myline.show() return gtk.TRUE elif event.type == gtk.gdk.MOTION_NOTIFY: if event.state & gtk.gdk.BUTTON1_MASK: self.set_line_endpoint(event.x, event.y) return gtk.TRUE elif event.type == gtk.gdk.ENTER_NOTIFY: # Make the outline wide, show the arrow widget.set(width_units=3, fill_color="cyan") self.myline.show() return gtk.TRUE elif event.type == gtk.gdk.LEAVE_NOTIFY: # Make the outline thin, hide the arrow widget.set(width_units=1, fill_color="blue") if self.lmb_pressed == 0: self.myline.hide() return gtk.TRUE return gtk.FALSE def build(self): self.myline = self.canvas.root().add('line', points=self.mylinepoints, width_units=1.0, line_style=gtk.gdk.LINE_ON_OFF_DASH, arrow_shape_a=10.0, arrow_shape_b=15.0, arrow_shape_c=5.0, first_arrowhead=gtk.TRUE, last_arrowhead=gtk.FALSE, fill_color='darkgrey') self.myobj = self.canvas.root().add('ellipse', x1=self.x-(self.width/2), y1=self.y-(self.height/2), x2=self.x+(self.width/2), y2=self.y+(self.height/2), fill_color='blue', outline_color='black', width_units=1.0) self.myline.hide() self.myobj.show() self.myobj.connect("event",self.item_event) class SimpleTest: def __init__(self): self.width = 400 self.height = 400 self.canvas = None def populate(self): self.element = WorldObject(self.canvas,200,200) def open_window(self): win = gtk.Window(gtk.WINDOW_TOPLEVEL) win.connect('destroy', gtk.mainquit) win.set_title('Simple Example') self.canvas = gnome.canvas.Canvas() self.canvas.set_size_request(self.width, self.height) self.canvas.set_scroll_region(0,0, self.width, self.height) win.add(self.canvas) self.canvas.show() win.show() if __name__ == '__main__': st = SimpleTest() st.open_window() st.populate() gtk.mainloop()
_______________________________________________ pygtk mailing list [EMAIL PROTECTED] http://www.daa.com.au/mailman/listinfo/pygtk Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/