I have a combobox widget in python that I would like to be able to choose multiple items, but I'm starting to think this is not possible. I see that it is possible on using Gtk.TreeView()
by setting the mode to multiple. Is there a way to get a combobox to do this? If no, can a treeview be placed inside a combobox and if so how (short coding example, please)? I'm using GTK3, but I could probably translate it from a GTK2 example.
Asked
Active
Viewed 2,063 times
1
1 Answers
1
After much research, I think it is simply a limitation of the combobox that it can only hold one item. So, the answer is:
Yes, a combobox can be set up to select multiple (if it has a TreeView in it)
and, thus,
Yes, a TreeView can be placed inside a ComboBox.
BUT, it doesn't behave correctly as the ComboBox acts as a container with the TreeView always visible, not just when activating the ComboBox. It can be set to select multiple useing Gtk.TreeSelection (gotten from Gtk.Treeview.get_selection()).
Here is the code:
#! /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()
I'm going to mess around with hiding and showing the treeview with activation of the combobox. I'll let you know how it goes.

narnie
- 1,742
- 1
- 18
- 34
-
Playing around with hiding the Gtk.TreeView widget leaves the combobox tall, which has an undesirable look to it. I don't recommend it. I'm just going to use a button and open a custom Gtk.Dialog. Not as asthetic as I was hoping for, but the best I can think to do. – narnie Mar 03 '12 at 00:36