2012-02-28 26 views
1

私は複数の項目を選択できるようにするためにpythonでコンボボックスウィジェットを持っていますが、これは不可能だと思っています。モードを複数に設定すると、Gtk.TreeView()を使用することが可能であることがわかります。これを行うためにコンボボックスを取得する方法はありますか?もしそうでなければ、ツリービューをコンボボックスの中に置くことができますか?そうすれば(短いコーディング例、どうぞ)?私はGTK3を使用していますが、おそらくGTK2の例から変換できます。GTKコンボボックスで複数の項目を選択する方法

答えて

1

多くの研究の結果、1つのアイテムしか保持できないということは、コンボボックスの単なる制限だと思います。だから、答えは次のとおりです。

はい、コンボボックスが(それはそれでツリービューを持っている場合)

を複数を選択するように設定することができ、したがって、

はい、TreeViewコントロールが内部に配置することができますコンボボックス。

ただし、ComboBoxをアクティブにするときだけでなく、TreeViewが常に表示されたコンテナとしてComboBoxが機能するため、正しく動作しません。 Gtk.TreeSelection(Gtk.Treeview.get_selection()から取得)を複数使用するように設定できます。ここで

は、コードは次のとおりです。

#! /usr/bin/env python 
# -*- coding: utf-8 -*- 

from gi.repository import Gtk 

PEOPLE = [ 
      "Frank", 
      "Martha", 
      "Jim Bob", 
      "Francis" 
      ] 

class TreeCombo(object): 
    def __init__(self): 
     self.win = Gtk.Window(title="Combo with liststore") 
     self.win.connect('delete-event', Gtk.main_quit) 

     self.store = Gtk.ListStore(str) 
     for person in PEOPLE: 
      self.store.append([person]) 

     # self.combo = Gtk.ComboBox.new_with_model(self.store) 
     self.combo = Gtk.ComboBox() 

     self.tree = Gtk.TreeView(self.store) 
     self.selector = self.tree.get_selection() 
     self.selector.set_mode(Gtk.SelectionMode.MULTIPLE) 

     self.combo_cell_text = Gtk.CellRendererText() 

     self.column_text = Gtk.TreeViewColumn("Text", self.combo_cell_text, text=0) 

     self.tree.append_column(self.column_text) 

     self.combo.add(self.tree) 

     self.win.add(self.combo) 

     self.win.show_all() 




def main(): 
    prog = TreeCombo() 
    Gtk.main() 

if __name__ == "__main__": 
    main() 

私は隠して周りの混乱に行くとコンボボックスの活性化とツリービューを示しています。私はそれがどのように進むのかを知らせます。

+0

Gtk.TreeViewウィジェットを隠して遊んでいると、コンボボックスの高さが残ってしまい、望ましくない外観になってしまいます。私はそれをお勧めしません。私はちょうどボタンを使用してカスタムGtk.Dialogを開くつもりです。私が望んでいたほど美人ではありませんが、私が考えることができる最高のものです。 – narnie

関連する問題