set_sensitive en ComboBox

Arnau Sanchez arnau en ehas.org
Mar Feb 6 08:21:54 CET 2007


Guedes escribió:

> Eu nao quero remover a linha, preciso dela para exibicao, mas nao posso
> deixar sensivel ao usuario.
> Por exemplo, no combobox existe o metodo "set_sensitive(sensitive)" para
> desativar a bugiganga.
> Exemplo pratico:
> modelo= gtk.ListStore(str)
> modelo.append(['Cartucho de Impressora'])
> modelo.append(['Computador 486 Semi-Novo'])
> modelo.append(['Computador Top de Linha'])
> modelo.append(['Monitor 21"'])
> mCombo= gtk.ComboBoxEntry()
> mCombo.set_model(modelo)
> mCombo.set_sensitive(false) # Desativa a bugiganga combobox

http://listas.aditel.org/archivos/python-es/2004-August/010217.html

Como bien explica Marcos en la introducción a su consulta, las listas, árboles y 
tablas en GTK+ se gestionan con un esquema MVC [1], algo que despista bastante 
al principio, pero que a la postre ofrece una gran versatilidad. Entender esto 
es de gran ayuda a la hora de trabajar con combos y tablas.

Dicho esto, ahí va una posible solución a lo que planteas: en primer lugar, yo 
cambiaría el ComboBoxEntry por un ComboBox, ¿realmente necesitas que el usuario 
pueda escribir la cadena? parece que lo que quieres es que seleccione alguno de 
los disponibles, así que el Entry no sería necesario. En cuanto a lo de 
establecer la propiedad "sensitive", tienes que añadir al modelo una columna que 
indique su estado y ligarlo al combo con la función "set_attributes" (también lo 
puedes hacer con "add_attribute"). Así, por ejemplo, con "sensitive=0" le estoy 
diciendo "para cada fila, usa el primer valor del modelo para establecer el 
valor de la propiedad 'sensitive'" (la misma idea para text=1)

import gtk
window = gtk.Window()
modelo= gtk.ListStore(bool, str)
modelo.append([True, 'Cartucho de Impressora'])
modelo.append([True, 'Computador 486 Semi-Novo'])
modelo.append([True, 'Computador Top de Linha'])
modelo.append([False, 'Monitor 21"'])
combo = gtk.ComboBox(modelo)
cell = gtk.CellRendererText()
combo.pack_start(cell, True)
combo.set_attributes(cell, text=1, sensitive=0)
window.add(combo)
window.show_all()
gtk.main()

...

[1] http://es.wikipedia.org/wiki/Modelo_Vista_Controlador




Más información sobre la lista de distribución Python-es