1

複数のアイテムを選択できるようにしたいpythonのコンボボックスウィジェットがありますが、これは不可能だと思い始めています。Gtk.TreeView()モードをマルチにすれば使えるようです。これを行うコンボボックスを取得する方法はありますか? いいえの場合、ツリービューをコンボボックス内に配置できますか?もしそうなら、どのように(短いコーディング例をお願いします)? 私は GTK3 を使用していますが、おそらく GTK2 の例から翻訳できます。

4

1 に答える 1

1

多くの調査の結果、1つのアイテムしか保持できないのはコンボボックスの制限にすぎないと思います。したがって、答えは次のとおりです。

はい、コンボボックスは複数を選択するように設定できます(TreeViewが含まれている場合)

したがって、

はい、TreeViewはComboBox内に配置できます。

ただし、ComboBoxは、ComboBoxをアクティブ化するときだけでなく、TreeViewが常に表示されるコンテナーとして機能するため、正しく動作しません。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()

コンボボックスをアクティブにしてツリービューを非表示にしたり表示したりすることをいじくりまわします。どうなるかお知らせします。

于 2012-03-03T00:28:26.013 に答える