boxsizers显示不正确WX.PYTHON文件

2024-06-28 20:19:23 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我的方法是wx.笔记本这是显示我的25个图像每个标签。我试着把我的图片和一个标题放在独立的盒子大小器里,然后把其中的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个,但只有一个。任何关于为什么会这样的想法都会有帮助。我也知道我可以使用网格,使它更容易,但我不允许使用网格由于限制。你知道吗


Tags: inselfaddforrangetabtempwx
1条回答
网友
1楼 · 发布于 2024-06-28 20:19:23

设置比例参数(第二次wxSizer.添加(…,p,…)作为所有项目的0。所以,这里没有布局,所有的项目都放在同一个地方,中心,因为wx.ALIGN_CENTER标志。你知道吗

将一个sizer的所有子sizer的比例设置为1,可以使分配的空间在子sizer之间均匀分布。不同的比例按比例分配每个子尺寸的空间。你知道吗

另外,listOfPanels[tab].SetSizer(listofVsizers[tab])为每个页面设置一个垂直大小。tab索引在[0,numOfTabs-1]范围内。因此,在填充listofVsizers之前需要重置currentSizer。你知道吗

或者。。。你想要(为什么?)在一个数组中包含所有主要大小。那么数组的大小是5*numOfTabs(不仅仅是numOfTabs)。这意味着您必须调整索引,而不仅仅是tab,然后不要重置currentSizer。你知道吗

你看,有一些混乱的代码。应该使用调试器查看所用索引的值。你知道吗

相关问题 更多 >