Hi i'm trying to write a composite widget with pygtk however i've been running into trouble when i try loading it. following is the code my code and below that is error i get at run time.

import gobject
import gtk

from gtk import gdk

if gtk.pygtk_version < (2,0):
   print "PyGtk 2.0 or later required for this"
   raise SystemExit


"""
class ComboButtonException(Exception):
   def __str__(self):
       return repr(
"!!!Error!!!! combobutton must be create with a list or tuple " """

class ComboButton(gtk.Widget):

   def __init__(self,menuitems):
       gtk.Widget.__init__(self)
       """
       if( !(isinstance(menuitems,types.TupleType) or
           isinstance(menuitems,type.ListType))):
               raise(ComboButtonException())
       """
       box = gtk.HBox(False,0)
       box.set_border_width(2)
       menu = gtk.Menu()
       for i in menuitems:
           item = gtk.MenuItem(i)
           item.show()
           menu.append(item)
           item.connect( "activate",self.menu_response,i)

       self.button = gtk.Button()
       arrow = gtk.Arrow(gtk.ARROW_DOWN,gtk.SHADOW_IN)
       self.button.add(arrow)
       box.add(self.button)

       self.entry = gtk.Entry()
       box.add(self.entry)

       box.show_all()

   def do_realize(self):
       self.set_flags(self.flags() | gtk.REALIZED)
       self.window = gtk.gdk.Window(
           self.get_parent_window(),
           width=self.allocation.width,
           height=self.allocation.height,
           window_type = gdk.WINDOW_CHILD,
           wclass=gdk.INPUT_OUTPUT,
           event_mask=self.get_events() | gtk.gdk.EXPOSURE_MASK|
               gtk.gdk.BUTTON1_MOTION_MASK| gtk.gdk.BUTTON_PRESS_MASK|
gtk.gdk.POINTER_MOTION_MASK| gtk.gdk.POINTER_MOTION_HINT_MASK)

       self.window.set_user_data(self)
       self.style.attach(self.window)
       self.style.set_background(self.window,gtk.STATE_NORMAL)
       self.window.mone_resize(*self.allocation)

   def do_unrealize(self):
       self.window.destroy()

   def do_size_request(self,requisition):
       requisition.height = 14
       requisition.width = 30

   def do_size_allocate(self,allocation):
       self.allocation = allocation
       if self.flags() & gtk.REALIZED:
           self.window.move_resize(*allocation)

   def do_expose_event(self,event):
       self.button.do_expose_event(self,event)
       self.entry.do_expose_event(self,event)
   def button_popup(self,widget,event,menu):
       if event.type == gtk.gdk.BUTTON_PRESS:
           menu.popup(None,None,None,event.button,event.time)
           return True
       return False

   def menu_response(self,widget,str):
       print "%s was clicked" % str
       buffer = self.entry.get_text()
       self.entry.set_text(buffer + str )


   def entry_call(self,widget,event):
       print "event is of %s type" % event.type

   def set_active(self,number):
       pass
   def get_text(self):
       return self.entry.get_text()

   def set_text(self,text):
       self.entry.set_text(text)

/---- end code

Traceback (most recent call last):
 File "/home/jubei/code/nokia/trunk/nokiagui.py", line 427, in ?
     gui = NewGui()
 File "/home/jubei/code/nokia/trunk/nokiagui.py", line 193, in __init__
     button = pkylib.ComboButton(("foo","bar","baz"))
 File "/home/jubei/code/nokia/trunk/pkylib.py", line 21, in __init__
     gtk.Widget.__init__(self)
TypeError: cannot create instance of abstract (non-instantiable) type `GtkWidget'





_______________________________________________
pygtk mailing list   pygtk@daa.com.au
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/

Reply via email to