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