【问题标题】:How do I iterate through all Gtk children in PyGtk recursively?如何递归遍历 PyGtk 中的所有 Gtk 子级?
【发布时间】:2013-12-09 09:11:55
【问题描述】:

我想用pygtk 获得主窗口的所有 Gtk 子对象的递归列表。我怎么做?

【问题讨论】:

    标签: pygtk


    【解决方案1】:

    注意这些:

    ...这里是一个函数,它是来自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)>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-15
      • 2012-03-10
      • 1970-01-01
      • 2019-12-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多