如何制作具有多个选择的GTK 2列表? [英] How do I make a GTK 2 list with multiple selection?

查看:46
本文介绍了如何制作具有多个选择的GTK 2列表?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在GTK 3版本中,添加了 ListBox 小部件,以支持,但带有滚动条:

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

解决方案

事实证明,有一种方法可以做到这一点一路回到GTK 2.0 ,但是选择常量的名称可能不同( SELECTION_MULTI ).

小部件看起来像这样:

配色方案是从我的GNOME主题继承的,所以不要太在意窗口的样式.此小部件可同时使用 Ctrl Shift 键.只需单击不同的项目,它不会自动具有多项选择.

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

 导入gtk类UI(gtk.Window):def __init __():gtk.Window .__ init __(自己)self.set_position(gtk.WIN_POS_CENTER)self.set_default_size(250,150)store = gtk.ListStore(str)对于我在范围(7)中:#此处的列表符号为奇数,但为必填项.store.append(["Item%d"%i])tree_view = gtk.TreeView()tree_view.set_model(商店)#视图可以支持整个树,但是我们只需要一个列表.渲染器= gtk.CellRendererText()column = gtk.TreeViewColumn(多重选择",渲染器,文本= 0)tree_view.append_column(column)#这是启用多个选择的部分.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():赢= UI()win.connect("destroy",gtk.main_quit)win.show_all()gtk.main()如果__name__ =="__main__":主要的() 

In a GTK 3 release, the ListBox widget added supported for multiple elements being selected from the list:

I'd like to achieve the same effect with GTK 2. I'm considering using a ScrolledWindow with a VBox of CheckButton's. I fear it's not going to look very good though; like this, but with a scrollbar:

Does anyone know a good way to emulate the functionality in the first image using GTK 2?

解决方案

It turns out there was a method of doing just this buried in the documentation! In fact, you should find it all the way back to GTK 2.0, but the selection constant might have had a different name (SELECTION_MULTI).

The widget looks like this:

The color scheme is inherited from my GNOME theme, so don't mind the window styling too much. This widget works with both Ctrl and Shift keys. It doesn't automatically have multiple selection just clicking on the different items.

Here's the (Python 2) MWE I made for this:

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()

这篇关于如何制作具有多个选择的GTK 2列表?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆