2015-01-31 5 views
2

Я пытаюсь сделать поле со списком изображений (как показано ниже) внутри ячейки treeview, чтобы сделать выбор.gtk: combo of pictures in treeview

enter image description here

Я пытался использовать cellRendererComboNew, чтобы сделать комбо, но варианты, чтобы заполнить работу выпадающий cellComboTextModel := только для String и я не могу вынести картины.

Я попытался использовать cellRendererPixbufNew. Он визуализирует изображения, но я не могу выполнить выделение на нем.

Каков правильный подход?

Пример в Haskell, Python или на любом языке был бы очень полезен.

С уважением.

ответ

1

В PyGobject Я придумал это решение. Пример полностью функциональный, но требует 2 png-файлов в одном каталоге. Я использовал два png с форматом 100 x 20 пикселей.

В предыдущем примере использовался Gtk.ComboBox.new_with_model_and_entry(), и мне не хватало функции set_entry_text_colum(), которая должна идти с таким видом combobox.

#!/usr/bin/python3 

from gi.repository import Gtk, Gdk, GdkPixbuf 

class ComboBoxWindow(Gtk.Window): 

    def __init__(self): 
     Gtk.Window.__init__(self, title="ComboBox Pixbuf Example") 

     self.set_border_width(10) 

     store = Gtk.ListStore(str, GdkPixbuf.Pixbuf) 
     solid_line = GdkPixbuf.Pixbuf.new_from_file("solid_line.png") 
     store.append(["1", solid_line]) 
     dashed_line = GdkPixbuf.Pixbuf.new_from_file("dashed_line.png") 
     store.append(["2", dashed_line]) 

     vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6) 

     combo = Gtk.ComboBox.new_with_model(store) 
     rend_int = Gtk.CellRendererText() 
     rend_pixbuf = Gtk.CellRendererPixbuf() 
     combo.pack_start(rend_int, False) 
     combo.add_attribute(rend_int, "text", 0) 
     combo.pack_start(rend_pixbuf, True) 
     combo.add_attribute(rend_pixbuf, "pixbuf", 1) 
     combo.connect("changed", self.on_combo_changed) 

     vbox.pack_start(combo, False, False, 0) 

     self.add(vbox) 

    def on_combo_changed(self, combo): 
     tree_iter = combo.get_active_iter() 
     if tree_iter != None: 
      model = combo.get_model() 
      row = model[tree_iter][0] 
      print("Selected row {0}".format(row)) 

win = ComboBoxWindow() 
win.connect("delete-event", Gtk.main_quit) 
win.show_all() 
Gtk.main() 

enter image description here

Похожий вопрос:

Источник:

+0

Он отлично подходит для ** индивидуального ComboBox **, но не для ** combobox в древовидной структуре **. Код Haskell для отдельных combobox находится в этом сообщении [http://stackoverflow.com/q/28258030/3595992]. – JeanJouX