我想获得一个带有pygtk
的主窗口的所有Gtk子对象的递归列表。我怎么做?
答案 0 :(得分:2)
注意到这些:
...这是一个函数,它是来自Getting a descendant (child) widget by name | PHP-GTK Community的PHP的一个端口:
# http://cdn.php-gtk.eu/cdn/farfuture/riUt0TzlozMVQuwGBNNJsaPujRQ4uIYXc8SWdgbgiYY/mtime:1368022411/sites/php-gtk.eu/files/gtk-php-get-child-widget-by-name.php__0.txt
# note get_name() vs gtk.Buildable.get_name(): https://stackoverflow.com/questions/3489520/python-gtk-widget-name
def get_descendant(widget, child_name, level, doPrint=False):
if widget is not None:
if doPrint: print("-"*level + gtk.Buildable.get_name(widget) + " :: " + widget.get_name())
else:
if doPrint: print("-"*level + "None")
return None
#/*** If it is what we are looking for ***/
if(gtk.Buildable.get_name(widget) == child_name): # not widget.get_name() !
return widget;
#/*** If this widget has one child only search its child ***/
if (hasattr(widget, 'get_child') and callable(getattr(widget, 'get_child')) and child_name != ""):
child = widget.get_child()
if child is not None:
return get_descendant(child, child_name,level+1,doPrint)
# /*** Ity might have many children, so search them ***/
elif (hasattr(widget, 'get_children') and callable(getattr(widget, 'get_children')) and child_name !=""):
children = widget.get_children()
# /*** For each child ***/
found = None
for child in children:
if child is not None:
found = get_descendant(child, child_name,level+1,doPrint) # //search the child
if found: return found
if (window):
window.connect("destroy", gtk.main_quit)
#pprint(inspect.getmembers(window.get_children()[0]))
print "E: " + str( get_descendant(window, "nofind", level=0, doPrint=True) )
用法:
print "E: " + str( get_descendant(window, "nofind", level=0, doPrint=True) )
# output:
# window1 :: GtkWindow
# -scrolledwindow1 :: GtkScrolledWindow
# --viewport1 :: GtkViewport
# ---vbox1 :: GtkVBox
# ----handlebox1 :: GtkHandleBox
# -----drawingarea1 :: GtkDrawingArea
# ----handlebox2 :: GtkHandleBox
# ----handlebox3 :: GtkHandleBox
# E: None
print "E: " + str( get_descendant(window, "viewport1", level=0, doPrint=True) )
# output:
# window1 :: GtkWindow
# -scrolledwindow1 :: GtkScrolledWindow
# --viewport1 :: GtkViewport
# E: <gtk.Viewport object at 0x96cadc4 (GtkViewport at 0x95278d0)>