Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中选择GTK组合框中的多个项目_Python_Combobox_Gtk_Gtktreeview_Cellrenderer - Fatal编程技术网

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

如何在python中选择GTK组合框中的多个项目,python,combobox,gtk,gtktreeview,cellrenderer,Python,Combobox,Gtk,Gtktreeview,Cellrenderer,我有一个python中的combobox小部件,我希望能够选择多个项目,但我开始认为这是不可能的。我发现通过将模式设置为multiple,可以使用Gtk.TreeView()。有没有办法得到一个组合框来做这件事?如果否,树状视图是否可以放在组合框中?如果是,如何放置(请提供简短的编码示例)?我使用的是GTK3,但我可能会将其从GTK2示例中翻译出来。经过大量研究,我认为这只是组合框的一个限制,它只能容纳一个项目。因此,答案是: 是的,可以将组合框设置为选择多个(如果其中包含TreeView) 因

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

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

是的,可以将组合框设置为选择多个(如果其中包含TreeView)

因此

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

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

我要在激活组合框的同时隐藏和显示树状视图。我会让你知道它是怎么回事。

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

是的,可以将组合框设置为选择多个(如果其中包含TreeView)

因此

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

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

我要在激活组合框的同时隐藏和显示树状视图。我会让你知道它是如何运行的。

玩弄隐藏Gtk.TreeView小部件会让combobox变得很高,这会让它看起来不受欢迎。我不推荐。我只是想用一个按钮打开一个自定义的Gtk对话框。不是像我希望的那样气喘吁吁,而是我所能想到的最好的方法。玩弄隐藏Gtk.TreeView小部件会让combobox很高,这看起来不太理想。我不推荐。我只是想用一个按钮打开一个自定义的Gtk对话框。不像我希望的那样气喘吁吁,但却是我能想到的最好的办法。