Comment créer une zone de liste à sélection multiple dans Ruby Glade / GTK, éventuellement à l'aide de TreeView?

StackOverflow https://stackoverflow.com/questions/1210602

Question

J'essaie de créer une liste à sélection multiple dans le programme Glade / Ruby et je me demande comment procéder, comme quel élément j'ajoute à la fenêtre et le code d'exemple correspondant que je peux utiliser. Je regardais GTKList mais il est dit que c'est obsolète maintenant et que je ne sais pas comment le faire fonctionner en rubis. Les documents de la liste GTK disent d’utiliser TreeView, mais je n’ai aucune idée de la façon de le configurer.

Pour que tout soit bien clair, j'aimerais quelque chose comme ceci, où l'utilisateur peut sélectionner plusieurs entrées:

texte alternatif http://geekswithblogs.net/images/geekswithblogs_net/dotNETvinz/Out .JPG

Merci pour l'aide les gars! Je suis vraiment désespéré sur cette question.

Était-ce utile?

La solution

En gros, vous devez utiliser GtkTreeView et définir son "modèle". propriété à un GtkListStore qui contient vos données. GtkTreeView gère la sélection avec la classe GtkTreeSelection. Utilisez gtk_tree_view_get_selection (ou le mappage correspondant dans ruby-gtk) pour obtenir GtkTreeSelection. Et définissez le mode de sélection sur "plusieurs".

Voici un exemple en Python. En Ruby / Gtk, il devrait en être de même.

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()

Autres conseils

La réponse ci-dessus est correcte, mais si vous l’écriviez en utilisant visualruby, ce serait beaucoup plus facile:

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

Cela définirait tout exactement comme dans votre exemple, y compris le titre.

Ensuite, il vous suffit de l'ajouter à une boîte ou à une fenêtre de défilement:

class GUI

  include GladeGUI

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

end

Allez à:

http://www.visualruby.net

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top