如何动态制定静态文本列表

时间:2012-07-04 06:47:41

标签: python wxpython iteration

我正在尝试使用statictext小部件创建一个在调用中在面板中制定列表的函数。我从sql表中提取信息,其中包含姓名,电话和电子邮件。这是我的例子,希望你能看到我正在做的事情。

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

现在我认为这会奏效。我错过了什么,忽略了什么?会发生什么事情,很多信息都没有显示出来,但是你可以看到它在某个地方被剪切,文字互相重叠。

尝试获得这种效果:

name1 phone1 email1

name2 phone2 email2

name3 phone3 email3

2 个答案:

答案 0 :(得分:0)

试试这个

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

答案 1 :(得分:0)

尝试使用sizer

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