2012-02-28 5 views
1

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

ответ

1

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

Да, выпадающий можно настроить, чтобы выбрать несколько (если он имеет 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() 

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

+0

Игра со скрытым видом виджета Gtk.TreeView оставляет выпадающий список, который имеет нежелательный вид. Я не рекомендую. Я просто использую кнопку и открываю пользовательский Gtk.Dialog. Не так, как я надеялся, а не так, но лучше всего я могу думать. – narnie