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/