iComboBox - gtk.ComboBox con i menu
« il: Aprile 19, 2010, 21:50 »
Tempo fa mentre scrivevo un programma ho avuto la necessità di creare un gtk.ComboBox che supportasse i menu e che utilizzasse quindi gtk.TreeStore al posto di gtk.ListStore:

[hlpycode]# -*- coding: utf-8 -*-

import gtk
import gobject

class iComboBox (gtk.ComboBox):
    def append_submenu(self, name):
        submenu = self.treestore.append(None, [name])
       
        self.iters[name] = submenu
        return submenu
   
    def append_submenu_child(self, submenu_iter, name):
        submenu_child = self.treestore.append(submenu_iter, [name])
       
        self.iters[name] = submenu_child
        return submenu_child
   
    def _changed_cb(self, action):
        self.active_iter = self.get_active_iter()
   
    def get_active_text(self):
        return self.treestore.get_value(self.active_iter, 0)

    def get_name_from_iter (main_window, iter):
        # Return the index of an iter inside iComboBox
       
        for name in iters:
            try:
                if self.iters[name] == iter:
                    return iter
            except KeyError:
                return None
   
    def __init__(self):
        self.treestore = gtk.TreeStore(gobject.TYPE_STRING)
        renderer = gtk.CellRendererText()
       
        gtk.ComboBox.__init__(self, self.treestore)
       
        self.active_iter = None
        self.iters = {}
       
        self.pack_start(renderer, True)
        self.add_attribute(renderer, 'text', 0)
       
        self.connect("changed", self._changed_cb)[/hlpycode]

Spero di essere stato utile. ;) Si possono trovare maggiori informazioni qua.