Foros del Web » Programando para Internet » Python »

referenciar varios widgets en un solo loop

Estas en el tema de referenciar varios widgets en un solo loop en el foro de Python en Foros del Web. Buenas, quisiera saber si esto es posible, me explico: Dada una interfaz de usuario con varios widgets, digamos varios lineEdit, de la forma: lineEdit1 lineEdit2 ...
  #1 (permalink)  
Antiguo 13/12/2013, 05:09
 
Fecha de Ingreso: octubre-2013
Mensajes: 59
Antigüedad: 10 años, 6 meses
Puntos: 0
referenciar varios widgets en un solo loop

Buenas, quisiera saber si esto es posible, me explico:

Dada una interfaz de usuario con varios widgets, digamos varios lineEdit, de la forma:

lineEdit1
lineEdit2
lineEdit3
lineEdit4
lineEdit5

Quisiera saber como hacer lo siguiente: (lo pongo en pseudocodigo)

Código Python:
Ver original
  1. for i in xrange(1,6):
  2.     lineEditi.setText("Hola elemento i")
Espero que se entienda la idea de lo que pretendo.

Es esto posible??

Gracias
  #2 (permalink)  
Antiguo 13/12/2013, 07:12
 
Fecha de Ingreso: mayo-2013
Mensajes: 207
Antigüedad: 10 años, 11 meses
Puntos: 31
Respuesta: referenciar varios widgets en un solo loop

Quieres cambiar el i del "Hola elemento i" por su número, ¿no? Pues entonces el problema es sencillo, es como si trabajaras sólo con la cadena de texto. Puedes usar tanto concatenación de dos cadenas de texto como el método format.
Código Python:
Ver original
  1. # Ejemplo
  2. i = 1
  3. "Hola elemento " + str(i)
  4. "Hola elemento {}".format(i)
  #3 (permalink)  
Antiguo 13/12/2013, 07:19
 
Fecha de Ingreso: octubre-2013
Mensajes: 59
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: referenciar varios widgets en un solo loop

No no no.....bueno si, el "i" de la cadena de texto tambien pero lo que MAS me interesaria seria poder cambiar dentro del loop el "i" de los nombres de los widgets.

Me refiero a los

lineEdit1
lineEdit2
lineEdit3
lineEdit4
lineEdit5

Lo que quiero es poder llamarlos de alguna forma dentro del loop como lineEditi

Porque en este caso solo tengo 5, pero imaginemos que tengo 20, entonces si quiero cambiar el texto de los 20 tendria que hacer

Código Python:
Ver original
  1. for i in xrange(1:21):
  2.     lineEdit1.setText(Hola elemento i)
  3.     lineEdit2.setText(Hola elemento i)
  4.     .
  5.     .
  6.     . etc etc etc
  #4 (permalink)  
Antiguo 13/12/2013, 07:56
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: referenciar varios widgets en un solo loop

Por favor no enumeres tus variables, es la peor nombre / practica (el segundo peor nombre es data).

Puedes usar una lista cuando creas los lineEdit

Código Python:
Ver original
  1. # Mas o menos así es cuando los creas.
  2. lineEditList = [LineEdit() for i in xrange(1, 21)]
  3.  
  4. # Y cuando accedes a ellos
  5. for i, lineEdit in enumerate(lineEditList, start=1):
  6.     lineEdit.setText("Hola elemento %d" % i)
  #5 (permalink)  
Antiguo 13/12/2013, 07:58
 
Fecha de Ingreso: mayo-2013
Mensajes: 207
Antigüedad: 10 años, 11 meses
Puntos: 31
Respuesta: referenciar varios widgets en un solo loop

Depende de la libreria que uses. Busca la manera de listar los elementos contenidos en otro o donde los tengas y seleccionas los que sean de los tipos que quieres.
  #6 (permalink)  
Antiguo 13/12/2013, 09:48
 
Fecha de Ingreso: octubre-2013
Mensajes: 59
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: referenciar varios widgets en un solo loop

@razpeitia, me gusta la solucion que propones, realmente es lo que necesito, pero sin embargo, cuando se dibuja la interfaz de usuario con Qt Designer y se colocan los elementos, el mismo programa los va enumerando automaticamente.

No se si hay alguna forma de cambiar eso, segun vas colocando mas lineEdit's, el Qt Designer los va enumerando e incrementando el numero que les pone al final.

Alguna solucion para esto??
  #7 (permalink)  
Antiguo 13/12/2013, 09:59
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 1 mes
Puntos: 1329
Respuesta: referenciar varios widgets en un solo loop

Puedes usar getattr: http://docs.python.org/2/library/functions.html#getattr

Saludos
__________________
Grupo Telegram Docker en Español
  #8 (permalink)  
Antiguo 13/12/2013, 10:59
 
Fecha de Ingreso: mayo-2013
Mensajes: 207
Antigüedad: 10 años, 11 meses
Puntos: 31
Respuesta: referenciar varios widgets en un solo loop

Yo de qt ni idea, no sé si te valdra algo como lo que indican aquí para resolver tu problema.
  #9 (permalink)  
Antiguo 13/12/2013, 11:18
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: referenciar varios widgets en un solo loop

Tal como dice el link que puso alzacon.

Puedes poner tu lista de lineEdit en un contenedor y simplemente obtener todos los lineEdit del contenedor.

Protip: Puedes cambiarle el nombre a tus widgets por cosas mas descriptivas.

Etiquetas: gui, loop, widgets
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 06:36.