所以我在这里的方法是要有一个wx.notebook,该标签可以显示每个标签25张图像。我试图将图像和标题一起放在独立的Box Sizers中,然后将其中5个独立的放置在水平Box Sizers中(每个标签分别有5个水平sizeers),因此每个水平图像需要5个垂直Sizeer(5 * 5) = 25)。即时通讯然后将这5个水平尺寸调整器放在一个垂直尺寸调整器中,以便获得5X5网格外观。它加载正确,我知道图像存储正确,但是当我显示它们时,每行只显示其中一张图像。我不知道我在做什么错。这是代码
listOfSizers = []
listofHSizers = []
listofVsizers = []
bSizer6 = wx.BoxSizer( wx.HORIZONTAL )
bSizer14 = wx.BoxSizer( wx.HORIZONTAL )
self.waferTab = wx.Notebook(self, wx.ID_ANY, wx.DefaultPosition,size = wx.Size( 900,1000 ) , style = wx.NB_TOP)
for i in range(waferNum):
temp = wx.BoxSizer(wx.VERTICAL)
listOfSizers.append(temp)
for i in range(numOfTabs*5):
temp = wx.BoxSizer(wx.HORIZONTAL)
listofHSizers.append(temp)
for i in range(numOfTabs):
temp = wx.BoxSizer(wx.VERTICAL)
listofVsizers.append(temp)
for tab in range(numOfTabs):
tempPanel = wx.Panel(self.waferTab,wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )
listOfPanels.append(tempPanel)
waferDesign = WaferInfo(die_size = (.2,.35),center_xy= (10 ,6.5), dia= 4.3 , edge_excl= 0.0 )
for i in range(waferNum):
temp = wm_core.WaferMapPanel(listOfPanels[i//25], xydList[i], waferDesign, data_type='discrete'.lower() , show_die_gridlines= False )
boxText = wx.StaticText( listOfPanels[i//25], wx.ID_ANY, mapTitles[i][0], wx.DefaultPosition, wx.DefaultSize, 0 )
boxText.Wrap(-1)
listOfSizers[i].Add(boxText, 0 , wx.ALIGN_CENTER , 5)
listOfSizers[i].Add(temp, 1, wx.EXPAND |wx.ALL, 5 )
currentHSizer = 0
nextHSizer = 0
currentSizer = 0
nextSizer = 0
for i in range(waferNum ):
if(nextHSizer != 4):
listofHSizers[currentHSizer].Add(listOfSizers[i], 0 , wx.ALIGN_CENTER, 3)
nextHSizer +=1
elif(nextHSizer == 4):
listofHSizers[currentHSizer].Add(listOfSizers[i], 0 , wx.ALIGN_CENTER, 3)
currentHSizer += 1
nextHSizer = 0
for i in range(len(listofHSizers)):
if(nextSizer !=4):
listofVsizers[currentSizer].Add(listofHSizers[i],0, wx.ALIGN_LEFT,5)
nextSizer +=1
elif(nextSizer == 4):
listofVsizers[currentSizer].Add(listofHSizers[i],0, wx.ALIGN_LEFT, 5)
currentSizer +=1
nextSizer = 0
print(len(listOfSizers))
print(len(listofHSizers))
print(len(listofVsizers))
for tab in range(numOfTabs):
tabString = ("Page"+ str(self.tabNumber))
listOfPanels[tab].SetSizer(listofVsizers[tab])
listOfPanels[tab].Layout()
listofVsizers[tab].Fit( listOfPanels[tab] )
self.waferTab.AddPage(listOfPanels[tab], tabString, select=False)
self.tabNumber += 1
bSizer6.Add(self.waferTab ,1, wx.EXPAND |wx.ALL, 5)
bSizer6.Add( bSizer14, 0, wx.EXPAND, 5 )
self.SetSizer(bSizer6 )
self.Layout()
#self.Centre( wx.BOTH )
每行假定有5个,但只有1个。关于为什么这样做的任何想法都会有所帮助。我也知道我可以使用网格来简化它,但是由于限制我不能使用网格。
答案 0 :(得分:0)
您将所有项目的比例参数(在wxSizer.Add(...,p,...)处设置为秒)设置为0
。因此,由于wx.ALIGN_CENTER
标志,没有布局,所有项目都移到同一位置,居中。
为分页器的所有子尺寸设置比例= 1的值可使分配的空间在这些子尺寸之间平均分配。每个子尺寸按比例分配不同的空间。
此外,listOfPanels[tab].SetSizer(listofVsizers[tab])
为每个页面设置垂直大小调整器。 tab
索引在[0,numOfTabs-1]范围内。因此,您需要在填充currentSizer
之前重置listofVsizers
。
或者...您想要(为什么?)将所有主要的大小调整器排列在一个数组中。然后,数组的大小为5 * numOfTabs(而不仅仅是numOfTabs)。这意味着您必须调整索引,而不仅仅是调整tab
,然后不要重置currentSizer
。
您会看到,其中有一些令人困惑的代码。您应该使用调试器查看所用索引的值。