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



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

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

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

因此,

是的,TreeView可以放置在组合框中。

但是,它的行为并不正确,因为ComboBox充当了一个容器,TreeView始终可见,而不仅仅是在激活ComboBox时。可以设置为选择多个使用Gtk.TreeSelection(从Gtk.Treview.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()

我将通过激活组合框来隐藏和显示树状视图。我会告诉你进展如何。

最新更新