2013-07-25 21 views
0

我想在第一個python GUI中複製列標題。我已經嘗試以下wxpython在FlexGridSizer中使用兩次相同的靜態文本.AddMany

bfont = wx.Font(10,wx.DEFAULT,wx.NORMAL,wx.BOLD) 
    angle = wx.StaticText(panel,label="Angle") 
    angle.SetFont(bfont) 
    count_c = wx.StaticText(panel,label="Counts (C)") 
    count_c.SetFont(bfont) 
    count_u = wx.StaticText(panel,label="Counts (U)") 
    count_u.SetFont(bfont) 

    fgs.AddMany([(angle),(count_c), (count_u), 
       (angle),(count_c), (count_u)]) 


    vbox.Add(fgs, proportion=1,flag=wx.ALL|wx.EXPAND,border=5) 

但是,這隻顯示我第二套頭。如何才能做到這一點?

回答

1

您不能將相同的小部件添加到兩個不同的位置。相反,您必須爲每一行創建單獨的小部件。既然你想在每一行都做同樣的事情,你可以使用循環:

import wx 

######################################################################## 
class MyPanel(wx.Panel): 
    """""" 

    #---------------------------------------------------------------------- 
    def __init__(self, parent): 
     """Constructor""" 
     wx.Panel.__init__(self, parent) 
     bfont = wx.Font(10,wx.DEFAULT,wx.NORMAL,wx.BOLD) 

     vbox = wx.BoxSizer(wx.VERTICAL) 
     fgs = wx.FlexGridSizer(rows=2, cols=3, vgap=5, hgap=5) 

     # add two rows of widgets to the sizer 
     widgets = [] 
     for i in range(2): 
      angle = wx.StaticText(self,label="Angle") 
      angle.SetFont(bfont) 
      widgets.append(angle) 

      count_c = wx.StaticText(self,label="Counts (C)") 
      count_c.SetFont(bfont) 
      widgets.append(count_c) 

      count_u = wx.StaticText(self,label="Counts (U)") 
      count_u.SetFont(bfont) 
      widgets.append(count_u) 

     fgs.AddMany(widgets) 
     vbox.Add(fgs, proportion=1,flag=wx.ALL|wx.EXPAND,border=5) 
     self.SetSizer(vbox) 

######################################################################## 
class MyFrame(wx.Frame): 
    """""" 

    #---------------------------------------------------------------------- 
    def __init__(self): 
     """Constructor""" 
     wx.Frame.__init__(self, None, title="Test") 
     panel = MyPanel(self) 
     self.Show() 

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