如何在Ruby Glade/GTK中制作多选列表框,也许可以使用TreeView?

3
我正在尝试在glade/ruby程序中创建一个多选列表框,想知道如何操作,例如我需要向窗口添加哪个元素以及相应的示例代码。 我看了GTKList,但它现在已经过时了,而且我不知道如何在ruby中使用它。 GTK List文档说要使用TreeView,但我不知道如何设置它。
只是为了明确,我想要像这样的东西,用户可以选择多个条目: alt text http://geekswithblogs.net/images/geekswithblogs_net/dotNETvinz/OutputPreselectListBox.JPG 谢谢大家的帮助!我真的很绝望这个问题。
2个回答

8

基本上,您需要使用GtkTreeView并将其“model”属性设置为包含数据的GtkListStore。 GtkTreeView使用GtkTreeSelection类管理选择。使用gtk_tree_view_get_selection(或在ruby-gtk中映射到的任何内容)获取GtkTreeSelection。并将选择模式设置为“multiple”。

以下是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()

非常感谢!我正在努力将其转换为 Ruby 版本,希望能够让它正常工作! - Javed Ahamed

-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

这将完全按照您的示例设置所有内容,包括标题。

然后您只需将其添加到框或滚动窗口中:

class GUI

  include GladeGUI

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

end

前往:

http://www.visualruby.net


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接