Как сделать список со множественным выбором в Ruby Glade / GTK, возможно, используя TreeView? - PullRequest
3 голосов
/ 31 июля 2009

Я пытаюсь создать список с множественным выбором в программе glade / ruby, и мне интересно, как мне это сделать, например, какой элемент я добавляю в окно и соответствующий пример кода, который я могу использовать. Я смотрел на GTKList, но там написано, что он устарел, а также я не знаю, как заставить его работать в ruby. Документы GTK List говорят, что нужно использовать TreeView, но я не знаю, как это настроить.

Просто чтобы прояснить, я хотел бы что-то вроде этого, где пользователь может выбрать несколько записей:

альтернативный текст http://geekswithblogs.net/images/geekswithblogs_net/dotNETvinz/OutputPreselectListBox.JPG

Спасибо за помощь, ребята! Я действительно отчаянно нуждаюсь в этом вопросе.

Ответы [ 2 ]

8 голосов
/ 31 июля 2009

По сути, вы должны использовать GtkTreeView и установить его свойство "модель" для GtkListStore, который содержит ваши данные. GtkTreeView управляет выделением с помощью класса GtkTreeSelection. Используйте gtk_tree_view_get_selection (или то, на что оно отображается в ruby-gtk), чтобы получить GtkTreeSelection. И установите режим выбора на «несколько».

Вот пример на 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()
0 голосов
/ 20 марта 2012

Ответ выше верен, но если бы вы написали его с помощью 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

...