Come creare una casella di riepilogo a selezione multipla in Ruby Glade / GTK, magari utilizzando TreeView?

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

Domanda

Sto cercando di creare una casella di riepilogo a selezione multipla nel programma glade / ruby ??e mi chiedo come procedo, come l'elemento che aggiungo alla finestra e il codice di esempio corrispondente che posso usare. Stavo guardando GTKList ma dice che ora è deprecato, e inoltre non so come farlo funzionare in ruby. I documenti dell'elenco GTK dicono di usare TreeView, ma non ho idea di come configurarlo.

Giusto per essere chiari, vorrei qualcosa del genere, in cui l'utente può selezionare più voci:

alt text http://geekswithblogs.net/images/geekswithblogs_net/dotNET .JPG

Grazie per l'aiuto ragazzi! Sono davvero disperato su questa domanda.

È stato utile?

Soluzione

Fondamentalmente, devi usare GtkTreeView e impostare il suo "modello" proprietà di un GtkListStore che contiene i tuoi dati. GtkTreeView gestisce la selezione con la classe GtkTreeSelection. Usa gtk_tree_view_get_selection (o qualunque cosa sia mappata in ruby-gtk) per ottenere GtkTreeSelection. E imposta la modalità di selezione su " multiple " ;.

Ecco un esempio in Python. In Ruby / Gtk dovrebbe essere simile.

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

Altri suggerimenti

La risposta sopra è corretta, ma se l'hai scritta usando visualruby sarebbe molto più semplice:

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

Ciò imposterebbe tutto esattamente come il tuo esempio, incluso il titolo.

Quindi basta aggiungerlo a una casella o scorrere la finestra:

class GUI

  include GladeGUI

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

end

Vai a:

http://www.visualruby.net

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top