Cómo formular dinámicamente una lista de texto estático

Estoy tratando de crear una función que, de guardia, formule una lista en un panel usando el widget de texto estático. Extraigo la información de una tabla SQL que contiene un nombre, teléfono y correo electrónico. Aquí está mi ejemplo y espero que puedas ver lo que estoy tratando de hacer.

info = [('name1','phone1','email1'),('name2','phone2','email2'),
('name3','phone3','email3')]

for name,phone,email in info:
    x = 0
    y = 0
    wx.StaticText(self.Panel,-1,str(name),pos=(10+x,40+y))
    wx.StaticText(self.Panel,-1,str(phone),pos=(100+x,40+y))
    wx.StaticText(self.Panel,-1,str(email),pos=(190+x,40+y))
    x = x + 90
    y = y + 30

Ahora creo que esto funcionaría. ¿Me estoy perdiendo algo, pasando por alto algo? Lo que sucede es que mucha de la información no aparece, pero puedes ver que en algún lugar se está recortando con palabras superpuestas entre sí.

TRATANDO DE OBTENER ESTE EFECTO:

nombre1 teléfono1 correo electrónico1

nombre2 teléfono2 correo electrónico2

nombre3 teléfono3 correo electrónico3

preguntado el 04 de julio de 12 a las 07:07

2 Respuestas

Pruébelo con un medidor

import wx

info = [('name1','phone1','email1'),('name2','phone2','email2'),
('name3','phone3','email3')]

class Frame(wx.Frame):
    def __init__(self,*args,**kwargs):
        wx.Frame.__init__(self,*args,**kwargs)
        panel= wx.Panel(self)
        sizer= wx.BoxSizer(wx.VERTICAL)

        grid_sizer= wx.GridSizer(len(info),3,5,5)
        for person in info:
            for detail in person:
                text= wx.StaticText(panel,label=detail)
                grid_sizer.Add(text)
        sizer.Add(grid_sizer,0,wx.EXPAND|wx.ALL,10)

        panel.SetSizer(sizer)

        self.Show()

class App(wx.App):
    def OnInit(self):
       Frame(None)
       return True

if __name__ == "__main__":
    app= App(False)
    app.MainLoop()

Respondido 04 Jul 12, 09:07

prueba este

x = 0
y = 0
for name, phone, email in info:        
    wx.StaticText(self.Panel, -1, str(name),  pos=(10+x,40+y))
    wx.StaticText(self.Panel, -1, str(phone), pos=(100+x,40+y))
    wx.StaticText(self.Panel, -1, str(email), pos=(190+x,40+y))

    y = y + 30

Respondido 14 Jul 12, 05:07

mejor que lo que estaba pasando pero igual no. Con esto consigo un poco de efecto escalera y sigo superpuesto. Debo señalar que hay alrededor de 10 tuplas en mi lista (de información). Edité mi publicación para mostrar lo que estoy tratando de obtener: isov5

@ Isov5 intente encontrar un lápiz y papel, dibuje algunos rectos, calcule las coordenadas y vuelva al código; mejorar tus habilidades matemáticas - Pinkdawn

Bueno, no. Hice este mismo procedimiento manualmente y funcionó bien. Solo actúa diferente cuando uso la iteración. Y no puedo insertar manualmente este texto estático porque se supone que debe extraer y mostrar información dinámicamente. - isov5

@Isov5 hola, elimino x = x + 90, haces este cambio y ves si desaparece el efecto de escalera - Pinkdawn

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.