Foros del Web » Programando para Internet » Python »

[SOLUCIONADO] gtk.combo_box_new_text()

Estas en el tema de gtk.combo_box_new_text() en el foro de Python en Foros del Web. Buenas tengo un problema con no con el gtk.combo sino con lo que quiero que haga... Tengo el combo que en una dirección busca unas ...
  #1 (permalink)  
Antiguo 06/05/2013, 14:30
 
Fecha de Ingreso: septiembre-2012
Mensajes: 53
Antigüedad: 12 años, 2 meses
Puntos: 0
gtk.combo_box_new_text()

Buenas tengo un problema con no con el gtk.combo sino con lo que quiero que haga...

Tengo el combo que en una dirección busca unas carpetas.. luego en esas carpetas hay unas imágenes con el nombre background.png. . . yo quiero que cuando en el combo seleccione una de las imagenes el la coloque abajo en la ventana de python. . .

lo hago de esta forma pero no me resulta si me pueden ayudar... gracias

Código Python:
Ver original
  1. import pygtk
  2. pygtk.require('2.0')
  3. import gtk, gobject
  4. import gobject
  5. import os
  6.  
  7. class Prueba:
  8.        
  9.     def __init__(self):
  10.         self.window = gtk.Window()
  11.         self.window.set_resizable(True)
  12.         self.window.set_title("Temas")
  13.         self.window.set_position(gtk.WIN_POS_CENTER)
  14.         self.window.set_border_width(0)
  15.         self.window.set_size_request(550, 600)
  16.        
  17.         self.fixed = gtk.Fixed()
  18.        
  19.         text = next(os.walk("/ruta/"))[1]
  20.         global combox_themas
  21.         combox_themas = gtk.combo_box_new_text()
  22.         combox_themas.set_size_request(180, 35)
  23.         for t in text: 
  24.             combox_themas.append_text(t)
  25.        
  26.         self.fixed.put(combox_themas, 320, 80)
  27.         combox_themas.show()
  28.        
  29.         if combox_themas.get_active_text():
  30.             self.image_theme = gtk.image_new_from_pixbuf(gtk.gdk.pixbuf_new_from_file_at_size('/ruta/'+combox_themas.get_active_text()+'/background.png', 417, 270))
  31.             self.fixed.put(self.image_theme, 71, 163)
  32.             self.image_theme.show()
  33.        
  34.         self.window.add(self.fixed)
  35.         self.window.show_all()
  36.         self.window.show()
  37.        
  38. def main():
  39.     gtk.main()
  40.     return 0
  41.  
  42. if __name__ == "__main__":
  43.     Prueba()
  44.     main()

si le quito el if combox_themas.get_active_text(): y lo coloco de esta forma la ruta a una imagen el si lo coloca la imagen dentro de la venta, pero necesito que sea con el combo si alguien sabe una forma muchas gracias. .

Código Python:
Ver original
  1. self.image_theme = gtk.image_new_from_pixbuf(gtk.gdk.pixbuf_new_from_file_at_size('/ruta/background.png', 417, 270))
  2. self.fixed.put(self.image_theme, 71, 163)
  3. self.image_theme.show()
  #2 (permalink)  
Antiguo 06/05/2013, 16:36
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: gtk.combo_box_new_text()

Bueno tienes varios errores, pero principalmente es por que nunca enlazas tu combobox a un evento.

Código Python:
Ver original
  1. import pygtk
  2. pygtk.require('2.0')
  3. import gtk
  4. import os
  5.  
  6. class Prueba:
  7.  
  8.     path = '/ruta/'
  9.        
  10.     def __init__(self):
  11.         self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
  12.         self.window.set_resizable(True)
  13.         self.window.set_title("Temas")
  14.         self.window.set_position(gtk.WIN_POS_CENTER)
  15.         self.window.set_border_width(0)
  16.         self.window.set_size_request(550, 600)
  17.         self.window.connect("delete_event", self.delete_event)
  18.         self.window.connect("destroy", self.destroy)
  19.        
  20.         self.fixed = gtk.Fixed()
  21.        
  22.         text = next(os.walk(self.path))[1]
  23.         text.sort(key=lambda x: x.upper())
  24.         combox_themas = gtk.combo_box_new_text()
  25.         combox_themas.set_size_request(180, 35)
  26.         for t in text:  
  27.             combox_themas.append_text(t)
  28.        
  29.         self.fixed.put(combox_themas, 320, 80)
  30.         combox_themas.show()
  31.         combox_themas.connect('changed', self.changed_cb)
  32.        
  33.         self.window.add(self.fixed)
  34.         self.window.show_all()
  35.         self.window.show()
  36.  
  37.     def changed_cb(self, combobox):
  38.         if combobox.get_active_text():
  39.             filename = self.path + combobox.get_active_text() + '/background.png'
  40.             if os.path.exists(filename):
  41.                 file_buffer = gtk.gdk.pixbuf_new_from_file_at_size(filename, 417, 270)
  42.                 self.image_theme = gtk.image_new_from_pixbuf(file_buffer)
  43.                 self.fixed.put(self.image_theme, 71, 163)
  44.                 self.image_theme.show()
  45.             else:
  46.                 # Put some error here
  47.                 pass
  48.  
  49.  
  50.     def delete_event(self, widget, event, data=None):
  51.         return False
  52.  
  53.     def destroy(self, widget, data=None):
  54.         gtk.main_quit()
  55.        
  56. def main():
  57.     gtk.main()
  58.     return 0
  59.  
  60. if __name__ == "__main__":
  61.     Prueba()
  62.     main()
  #3 (permalink)  
Antiguo 07/05/2013, 14:02
 
Fecha de Ingreso: septiembre-2012
Mensajes: 53
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: gtk.combo_box_new_text()

Muchas gracias por su respuesta me fue de gran ayuda :D ejejejjeje otra duda que no lo veo muy claro si quiero resetear para que imagen no quede montado. . . se que para resetear el combo es combox_themas.get_model().clear() dentro de un función. . . pero en este caso quien pone la imagen es el fixed tengo resetear el fixed hay alguna funciona que haga eso porque lo estuve buscando pero no encontré forma. .. . y gracias por la ayuda con lo del combo.. .
  #4 (permalink)  
Antiguo 08/05/2013, 12:43
 
Fecha de Ingreso: septiembre-2012
Mensajes: 53
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: gtk.combo_box_new_text()

Muchas gracias razpeitia por su respuesta de nuevo resolví el problema de la imagen que se monta una sobre la otra... utilizando la misma ruta y la imagen para crear una nueva imagen del la dimensión que quería ya que con. . .
Código Python:
Ver original
  1. file_buffer = gtk.gdk.pixbuf_new_from_file_at_size(self.RUTA_TMP, 417, 270)
  2. image_theme = gtk.image_new_from_pixbuf(file_buffer)
no me fue muy útil..

introduje dentro de la función changed_cb(self, combobox): el siguiente código . ..
Código Python:
Ver original
  1. import Image
  2.  
  3. imageFile = "prueba.jpg"
  4. im1 = Image.open(imageFile)
  5.  
  6. width = 417
  7. height = 270
  8.  
  9. im5 = im1.resize((width, height), Image.ANTIALIAS)
  10.  
  11. ext = ".png"
  12. im5.save("ANTIALIAS" + ext)
con eso pude crear una imagen del las dimensiones que quería y mucho mas fácil lo dejo aquí por si acaso alguien mas le sirve :D

Etiquetas: file
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:05.