Pergunta

Eu estou tentando fazer uma escolha de vários caixa de listagem na clareira / ruby ??programa e eu estou querendo saber como eu vou fazer isso, como o elemento que eu adicionar à janela e o código de exemplo correspondente posso usar. Eu estava olhando para GTKList mas ele diz que está obsoleta agora, e eu também não sei como fazê-lo funcionar em ruby. Lista GTK docs dizem usar TreeView, mas não tenho idéia de como configurar isso.

Só para ficar claro, eu gostaria de algo como este, onde o usuário pode selecionar várias entradas:

alt texto http://geekswithblogs.net/images/geekswithblogs_net/dotNETvinz/OutputPreselectListBox .JPG

Obrigado pela ajuda caras! Estou realmente desesperada sobre esta questão.

Foi útil?

Solução

Basicamente, você tem que usar GtkTreeView e defina sua propriedade "modelo" a um GtkListStore que contém seus dados. GtkTreeView administra selecção com classe GtkTreeSelection. Use gtk_tree_view_get_selection (ou seja lá o que é mapeado no ruby-gtk) para obter o GtkTreeSelection. E definir o modo de selecção para "múltiplos".

Aqui está um exemplo em Python. Em Ruby / GTK deve ser similar.

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

Outras dicas

A resposta acima está correto, mas se você escreveu usando visualruby seria muito mais fácil:

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

Isso seria definir tudo exatamente como o seu exemplo, incluindo o título.

Então você só adicioná-lo a uma caixa, ou ScrolledWindow:

class GUI

  include GladeGUI

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

end

Vá para:

http://www.visualruby.net

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top