Tutorials
Ruby Gtk::TreeView
Wer mit Ruby ein GUI erstellen möchte, ist mit GTK gut beraten. Obwohl im allgemeinen recht einfach, stellen sich jedoch hin und wieder ein paar Stolpersteine in den Weg. Als ich vor kurzem versuchte eine Liste von Einträge darzustellen, wie man sie z.B. im E-Mailprogramm findet, stieß ich auf eben einen solchen Stolperstein. Deshalb möchte ich nachfolgend eine ganz kurze Einführung geben, wie man eine solche TreeView bzw. ListView programmiert.
1. Daten hinzufügen
Zuerst einmal möchte man natürlich ein paar Daten hinzufügen. Das geht relativ einfach, indem man ein ListStore- bzw. TreeStore-Objekt initialisiert und dieses dann befüllt. Das kann wie folgt aussehen:
# Datenhaltung list_store = Gtk::ListStore.new(String, String, String) # Daten hinzufügen iter = list_store.append() # fügt eine Zeile ein # Zeile mit Daten füllen iter[0] = 'kein Betreff' iter[1] = 'test@test.de' iter[2] = 'wichtig'
2. Daten anzeigen
Um Daten anzeigen zu lassen benötigen wir eine View, einen Renderer sowie ein paar Spalten. Und das könnte so aussehen.
# View erstellen und mit unseren Daten verknüpfen
view = Gtk::TreeView.new(list_store)
# Renderer erstellen
renderer = Gtk::CellRendererText.new()
# Jetzt noch die Spalten
# Wichtig: Der Hash muss den Index erhalten, der den Daten in der Zeile
# entspricht erklärt sich sicher nachfolgend.
col = Gtk::TreeViewColumn.new('Betreff', renderer, :text => 0)
view.append_column(col)
col = Gtk::TreeViewColumn.new('Absender', renderer, :text => 1)
view.append_column(col)
col = Gtk::TreeViewColumn.new('Priorität', renderer, :text => 2)
view.append_column(col)
3. Alles zusammenpacken
Abschließend muss man die View einfach dem Fenster hinzufügen und schon hat man eine Liste. Hier noch mal das komplette Beispiel inkl. Bibliotheken und Fenster:
require 'gtk2'
# Fenster und Events erstellen
window = Gtk::Window.new
window.title = "TreeView Beispiel"
window.set_size_request(400, 400)
window.signal_connect('destroy') {
Gtk.main_quit
}
# Datenhaltung
list_store = Gtk::ListStore.new(String, String, String)
# Daten hinzufügen
iter = list_store.append() # fügt eine Zeile ein
# Zeile mit Daten füllen
iter[0] = 'kein Betreff'
iter[1] = 'test@test.de'
iter[2] = 'wichtig'
# View erstellen und mit unseren Daten verknüpfen
view = Gtk::TreeView.new(list_store)
# Renderer erstellen
renderer = Gtk::CellRendererText.new()
# Jetzt noch die Spalten
# Wichtig: Der Hash muss den Index erhalten, der den Daten in der Zeile
# entspricht erklärt sich sicher nachfolgend.
col = Gtk::TreeViewColumn.new('Betreff', renderer, :text => 0)
view.append_column(col)
col = Gtk::TreeViewColumn.new('Absender', renderer, :text => 1)
view.append_column(col)
col = Gtk::TreeViewColumn.new('Priorität', renderer, :text => 2)
view.append_column(col)
window.add(view)
window.show_all
Gtk.main
Weitere Informationen:
Wer detailiertere Informationen und Erklräungen sucht, der findet das hier: