2009-07-31 62 views
3

我想在glade/ruby​​程序中做一个多选列表框,我想知道如何去做这件事,就像我添加到窗口中的元素和我可以使用的相应示例代码。我在寻找GTKList,但它说它现在已经被弃用了,我也不知道如何让它在Ruby中工作。 GTK List文档声称使用TreeView,但我不知道如何设置它。如何在Ruby Glade/GTK中创建多选列表框,也许使用TreeView?

只是要清楚,我想这样的事情,在这里用户可以选择多个条目:

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

感谢您的帮助家伙!我对这个问题非常绝望。

回答

8

基本上,您必须使用GtkTreeView并将其“模型”属性设置为包含您的数据的GtkListStore。 GtkTreeView使用GtkTreeSelection类管理选择。使用gtk_tree_view_get_selection(或任何它被映射到ruby-gtk)来获取GtkTreeSelection。并将选择模式设置为“多个”。

下面是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() 
+0

太谢谢你了!我正在努力将其转换成ruby版本,并希望能够使它工作! – 2009-07-31 15:21:16

-1

上面的答案是正确的,但如果你使用它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 

这将精确地调整一切都像你的榜样,包括标题。

然后你只需将它添加到一个盒子,或scrolledwindow:

class GUI 

    include GladeGUI 

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

end 

转到:

http://www.visualruby.net

相关问题