Как выбрать несколько элементов в выпадающем списке GTK в Python - PullRequest
1 голос
/ 28 февраля 2012

У меня есть виджет со списком в Python, который я хотел бы иметь возможность выбирать несколько элементов, но я начинаю думать, что это невозможно. Я вижу, что это возможно при использовании Gtk.TreeView(), установив режим на несколько. Есть ли способ получить комбинированный список, чтобы сделать это? Если нет, можно ли поместить древовидное представление в поле со списком, и если да, то как (пример короткого кодирования, пожалуйста)? Я использую GTK3, но я мог бы перевести его с примера GTK2.

1 Ответ

1 голос
/ 03 марта 2012

После долгих исследований, я думаю, что это просто ограничение комбобокса, что он может содержать только один предмет.Итак, ответ таков:

Да, можно настроить комбинированный список для выбора нескольких (если в нем есть TreeView)

и, таким образом,

Да,TreeView может быть размещен внутри ComboBox.

НО, он не ведет себя правильно, так как 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()

Я собираюсь возитьсяс сокрытием и отображением дерева с активацией выпадающего списка.Я дам вам знать, как это происходит.

...