如何制作具有多项选择的 GTK 2 列表?

How do I make a GTK 2 list with multiple selection?

在 GTK 3 版本中,ListBox 小部件添加了对 multiple elements being selected from the list 的支持:

我想用 GTK 2 达到同样的效果。我正在考虑使用 ScrolledWindowVBoxCheckButton。不过,我担心它看起来不会很好; like this,但带有滚动条:

有人知道使用 GTK 2 模拟第一张图片中的功能的好方法吗?

原来有一种方法可以做到这一点 buried in the documentation! In fact, you should find it all the way back to GTK 2.0,但选择常量可能有不同的名称 (SELECTION_MULTI)。

小部件如下所示:

配色方案继承自我的 GNOME 主题,所以不要太介意 window 样式。此小部件适用于 CtrlShift 键。只需单击不同的项目,它不会自动进行多项选择。

这是我为此制作的 (Python 2) MWE:

import gtk


class UI(gtk.Window):
    def __init__(self):
        gtk.Window.__init__(self)
        self.set_position(gtk.WIN_POS_CENTER)
        self.set_default_size(250, 150)

        store = gtk.ListStore(str)
        for i in range(7):
            # The list notation here is odd, but required.
            store.append(["Item %d" % i])

        tree_view = gtk.TreeView()
        tree_view.set_model(store)

        # The view can support a whole tree, but we want just a list.
        renderer = gtk.CellRendererText()
        column = gtk.TreeViewColumn("Multiple Selection", renderer, text=0)
        tree_view.append_column(column)

        # This is the part that enables multiple selection.
        tree_view.get_selection().set_mode(gtk.SELECTION_MULTIPLE)

        scrolled_tree = gtk.ScrolledWindow()
        scrolled_tree.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_ALWAYS)
        scrolled_tree.add_with_viewport(tree_view)

        self.add(scrolled_tree)


def main():
    win = UI()
    win.connect("destroy", gtk.main_quit)
    win.show_all()
    gtk.main()


if __name__ == "__main__":
    main()