如何在python中的GTK组合框中选择多个项目

时间:2012-02-28 17:27:07

标签: python combobox gtk gtktreeview cellrenderer

我在python中有一个combobox小部件,我希望能够选择多个项目,但我开始认为这是不可能的。我看到通过将模式设置为多个可以使用Gtk.TreeView()。有没有办法让组合框来做到这一点?如果不是,可以将树视图放在组合框内,如果是,如何(请简短编码示例)?我正在使用GTK3,但我可以从GTK2示例中翻译它。

1 个答案:

答案 0 :(得分:1)

经过大量研究,我认为只是组合框的一个限制,它只能容纳一个项目。所以,答案是:

是的,组合框可以设置为选择多个(如果它有一个TreeView)

因此,

是的,TreeView可以放在ComboBox中。

但是,它的行为不正确,因为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()

我将要隐藏并通过激活组合框显示树视图。我会告诉你它是怎么回事。