2009-07-31 5 views
3

glade/ruby ​​프로그램에서 다중 선택 목록 상자를 만들려고하고 있는데,이 요소를 윈도우에 추가하는 요소와 사용할 수있는 예제 코드와 같이 어떻게 처리하는지 궁금합니다. 나는 GTKList를보고 있었지만 지금은 더 이상 사용되지 않으며 또한 루비에서 작동하도록하는 방법을 모른다. 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에서 매핑 된 것)을 사용하십시오. 그리고 선택 모드를 "multiple"로 설정하십시오.

다음은 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 

.

그럼 그냥 상자, 또는 scrolledwindow에 추가 :

class GUI 

    include GladeGUI 

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

end 

이동을 :

http://www.visualruby.net

관련 문제