боксеры не отображаются корректно WX.PYTHON - PullRequest
0 голосов
/ 28 ноября 2018

Итак, мой подход заключается в том, чтобы иметь wx.notebook, который отображает мои 25 изображений на вкладку.Я пытался поместить свои изображения вместе с надписью в независимые боксы Sizer, а затем поместить 5 из этих независимых в горизонтальные боксы размеров (по 5 горизонтальных калибровок на табуляцию). Таким образом, каждый горизонтальный берет 5 вертикальных размеров (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 )

, и результат выглядит так: enter image description here

в каждой строке должно быть 5, но только одна.Любая идея о том, почему это может быть полезно.Также я знаю, что мог бы использовать сетку, чтобы упростить ее, но я не могу использовать сетку из-за ограничений.

1 Ответ

0 голосов
/ 28 ноября 2018

Вы устанавливаете параметр пропорции (секунда в wxSizer.Add (..., p, ...)) как 0 для всех элементов.Таким образом, макета нет, все элементы перемещаются в одно и то же место, по центру, из-за флага wx.ALIGN_CENTER.

Установка значения пропорции = 1 для всех подсайзеров классификатора делает выделенное пространство равномернымраспределены среди подсайзеров.Разные пропорции распределяют пространство для каждого подгруппы пропорционально его пропорции.

Кроме того, listOfPanels[tab].SetSizer(listofVsizers[tab]) устанавливает вертикальный размер для каждой страницы.Индекс tab находится в диапазоне [0, numOfTabs-1].Таким образом, вам нужно сбросить currentSizer перед заполнением listofVsizers.

или ... вы хотите (почему?) Иметь все основные размеры в массиве.Тогда размер массива составляет 5 * numOfTabs (а не только numOfTabs).Это означает, что вы должны настроить индекс вместо tab, а затем не сбрасывать currentSizer.

Видите, есть какой-то запутанный код.Вы должны использовать отладчик, чтобы увидеть значения используемых вами индексов.

...