2012-07-04 1 views
0

J'essaie de créer une fonction qui sur appel formule une liste dans un panneau en utilisant le widget statictext. Je tire l'information d'une table de sql qui contient un nom, un téléphone, et un email. Voici mon exemple et j'espère que vous pouvez voir ce que j'essaie de faire.Comment formuler dynamiquement une liste statictext

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 

Maintenant, je pense que cela fonctionnerait. Ai-je manqué quelque chose, en oubliant quelque chose? Qu'est-ce qui se passe est beaucoup de l'information ne se présente pas, mais vous pouvez voir que quelque part c'est l'écrêtage avec des mots qui se chevauchent.

ESSAYER pour obtenir cet effet:

nom1 phone1 EMAIL1

nom2 phone2 EMAIL2

NAME3 téléphone3 email3

Répondre

0

essayer cette

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 
+0

mieux que ce qui se passait mais toujours pas. Avec cela, je reçois un effet d'escalier qui se chevauche encore. Je dois noter qu'il y a environ 10 tuples dans ma liste (info). J'ai édité mon post pour montrer ce que j'essaie d'obtenir – Isov5

+0

@ Isov5 essayez de trouver un crayon et du papier, dessinez un rect, calculez les coordonnées et revenez au code; améliorez vos compétences en mathématiques – pinkdawn

+0

Euh, eh bien non. J'ai fait cette même procédure manuellement et cela a bien fonctionné. Cela ne change que lorsque j'utilise l'itération. Et je ne peux pas insérer manuellement ces statictext parce que c'est supposé tirer et afficher des informations dynamiquement. – Isov5

0

Essayez avec un calibreur

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() 
Questions connexes