2009-07-31 3 views
3

私はglade/ruby​​プログラムで複数選択リストボックスを作成しようとしています。どのような要素をウィンドウに追加するのか、それに対応するサンプルコードのように、これをどうやって行うのかと思います。私はGTKListを見ていましたが、現在は推奨されておらず、またRubyで動作させる方法もわかりません。 GTK List DocsはTreeViewを使用すると言っていますが、どのように設定するのか分かりません。ヘルプみんなのためRuby Glade/GTKで複数選択リストボックスを作成するには、多分TreeViewを使用しますか?

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

ありがとう:

だけ明確にするために、私は、ユーザーが複数の項目を選択することができ、このようなものを、たいと思います!私は本当にこの質問に絶望的です。

答えて

8

基本的に、GtkTreeViewを使用し、その "モデル"プロパティをデータを含むGtkListStoreに設定する必要があります。 GtkTreeViewはGtkTreeSelectionクラスで選択を管理します。 GtkTreeSelectionを取得するには、gtk_tree_view_get_selection(またはruby-gtkにマップされているもの)を使用します。選択モードを「複数」に設定します。

ここに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

はありがとうございました!私はこれをルビーバージョンに変換しようとしています。うまくいけば、それを動作させることができます! –

-1

上記の答えは正しいのですが、あなたはそれ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

関連する問題