Wie ein Multiple-Select-List-Feld in Ruby Glade / GTK, vielleicht TreeView mit machen?
Frage
Ich versuche, eine Mehrfachauswahl-Listenfeld in Lichtung / Ruby-Programm zu machen, und ich frage mich, wie ich über das tun dies gehen, wie das, was Element ich zum Fenster hinzufügen und das entsprechende Beispiel-Code kann ich verwenden. Ich war auf der Suche auf GTKList aber es sagt, es ist jetzt veraltet, und auch ich weiß nicht, wie es zu bekommen in Ruby zu arbeiten. GTK Liste docs sagt TreeView zu verwenden, aber ich habe keine Ahnung, wie das einzurichten.
Just klar sein, würde ich so etwas wie dieses mögen, wo der Benutzer mehrere Einträge auswählen können:
alt text http://geekswithblogs.net/images/geekswithblogs_net/dotNETvinz/OutputPreselectListBox .JPG
Vielen Dank für die Hilfe Jungs! Ich bin in dieser Frage wirklich verzweifelt.
Lösung
Grundsätzlich haben Sie GtkTreeView zu nutzen und deren „Modell“ Eigenschaft auf einen GtkListStore, die Ihre Daten enthalten. GtkTreeView verwaltet Auswahl mit GtkTreeSelection Klasse. Verwenden Sie gtk_tree_view_get_selection (oder was auch immer es ist abgebildet in Rubin-gtk) die GtkTreeSelection zu bekommen. Und stellen Sie den Auswahlmodus auf „mehr“.
Hier ist ein Beispiel in Python. In Ruby / Gtk sollte es ähnlich sein.
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()
Andere Tipps
Die obige Antwort ist richtig, aber wenn Sie es visualruby es mit geschrieben wäre viel einfacher:
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
Das würde alles genau wie Ihr Vorbild, darunter den Titel.
Dann fügen Sie es einfach in eine Box oder scrolledwindow:
class GUI
include GladeGUI
def initialize()
load_glade(__FILE__)
@builder("Scrolledwindow1").add(MyList.new)
show_window()
end
end
Gehe zu: