代码之家  ›  专栏  ›  技术社区  ›  Javed Ahamed

如何在RubyGlade/GTK中创建多选列表框,或者使用TreeView?

  •  3
  • Javed Ahamed  · 技术社区  · 17 年前

    我正试图在glade/ruby程序中创建一个多选列表框,我想知道我该怎么做,比如我在窗口中添加了什么元素以及可以使用的相应示例代码。我曾经看过gtklist,但它说它现在已经被否决了,而且我不知道如何让它在Ruby中工作。GTK列表文档说要使用TreeView,但我不知道如何设置它。

    为了清楚起见,我希望这样做,用户可以选择多个条目:

    alt text http://geekswithblogs.net/images/geekswithblogs_net/dotNETvinz/OutputPreselectListBox.JPG

    谢谢你们的帮助!在这个问题上我真的很绝望。

    2 回复  |  直到 14 年前
        1
  •  8
  •   dmitry_vk    17 年前

    基本上,您必须使用gtktreeview并将其“model”属性设置为包含您的数据的gtkliststore。 GTKTreeView使用GTKTreeSelection类管理选择。使用gtk_tree_view_get_selection(或Ruby gtk中映射到的任何内容)获得gtk tree selection。并将选择模式设置为“多个”。

    下面是Python中的一个示例。在Ruby/GTK中,它应该类似。

    import pygtk
    pygtk.require('2.0')
    import gtk
    import gobject
    
    
    w = gtk.Window()
    w.connect('destroy', lambda w:gtk.main_quit())
    
    l = gtk.ListStore(gobject.TYPE_STRING)
    
    l.append(('Vinz',))
    l.append(('Jhen',))
    l.append(('Chris',))
    l.append(('Shynne',))
    
    treeview = gtk.TreeView()
    treeview.set_model(l)
    
    column = gtk.TreeViewColumn()
    cell = gtk.CellRendererText()
    column.pack_start(cell)
    column.add_attribute(cell,'text',0)
    treeview.append_column(column)
    
    treeview.get_selection().set_mode(gtk.SELECTION_MULTIPLE)
    
    def print_selected(treeselection):
        (model,pathlist)=treeselection.get_selected_rows()
        print pathlist
    
    treeview.get_selection().connect('changed',lambda s: print_selected(s))
    
    w.add(treeview)
    
    w.show_all()
    
    gtk.main()
    
        2
  •  -1
  •   user1182000    14 年前

    上面的答案是正确的,但是如果您使用VisualRuby编写它,那么会更容易:

    class MyList < VR::Listview
    
      def initialize(:employee_names => String)
        add_row(:employee_names => "Vince")
        add_row(:employee_names => "Jhen")
        add_row(:employee_names => "Chris")
        add_row(:employee_names => "Shynne")
      end
    
    end
    

    这将使所有内容都与您的示例完全相同,包括标题。

    然后将其添加到一个框或滚动窗口中:

    class GUI
    
      include GladeGUI
    
      def initialize()
        load_glade(__FILE__)
        @builder("Scrolledwindow1").add(MyList.new)
        show_window()
      end
    
    end
    

    去:

    http://www.visualruby.net