0

Notebook 的 page1 中的 panel1 使用 Size(400,100) 定义..我不希望 Sizer 调整我的面板大小..

测试.py

import random
import wx

########################################################################
class TabPanel1(wx.Panel):
    #----------------------------------------------------------------------
    def __init__(self, parent):
        """"""
        wx.Panel.__init__(self, parent=parent)

        colors = ["red", "blue", "gray", "yellow", "green"]
        self.SetBackgroundColour(random.choice(colors))

    panel1 = wx.Panel(self,size=(400,100))
    panel1.SetBackgroundColour('brown')

    panel1gs = wx.GridSizer(2,2,1,2)

    panel1gs.AddMany( [ (wx.StaticText(panel1,label='FirstLabel'),0,wx.EXPAND),
            (wx.StaticText(panel1,label='SecondLabel'),0,wx.EXPAND),
            (wx.StaticText(panel1,label='ThirdLabel'),0,wx.EXPAND),
            (wx.StaticText(panel1,label='FourthLabel'),0,wx.EXPAND)
            ] )



    panel1.SetSizer(panel1gs)

    panel2 = wx.Panel(self,size=(400,100))
    panel2.SetBackgroundColour('#4f5042')

    panel3 = wx.Panel(self,size=(400,100))
    panel3.SetBackgroundColour('#4f5042')

        btn = wx.Button(self, label="Press Me")
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(btn, 0, wx.ALL, 5)
    sizer.Add(panel1, 0, wx.ALL, 5)
    sizer.Add(panel2, 0, wx.ALL, 5)
    sizer.Add(panel3, 0, wx.ALL, 5)


        self.SetSizer(sizer)

class TabPanel2(wx.Panel):
    #----------------------------------------------------------------------
    def __init__(self, parent):
        """"""
        wx.Panel.__init__(self, parent=parent)

        colors = ["red", "blue", "gray", "yellow", "green"]
        self.SetBackgroundColour(random.choice(colors))

        btn = wx.Button(self, label="Press Me")
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(btn, 0, wx.ALL, 10)

        self.SetSizer(sizer)

########################################################################
class DemoFrame(wx.Frame):
    """
    Frame that holds all other widgets
    """

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""        
        wx.Frame.__init__(self, None, wx.ID_ANY, 
                          "Notebook Tutorial",
                          size=(800,600)
                          )
        panel = wx.Panel(self)

        notebook = wx.Notebook(panel)
        tabOne = TabPanel1(notebook)
        notebook.AddPage(tabOne, "Tab 1")

        tabTwo = TabPanel2(notebook)
        notebook.AddPage(tabTwo, "Tab 2")

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(notebook, 1, wx.ALL|wx.EXPAND, 5)
        panel.SetSizer(sizer)
        self.Layout()

        self.Show()

#----------------------------------------------------------------------
if __name__ == "__main__":
    app = wx.App(False)
    frame = DemoFrame()
    app.MainLoop()
4

1 回答 1

1

sizer 可以通过两种方式更改其中项目的大小。

首先是一个wx.EXPAND标志,它“将导致项目被扩展以填充由 sizer 提供的尽可能多的空间”。你正在使用这个标志,但你不想要这种行为,所以你应该删除它们。

其次,wx.BoxSizers 可以使用方法proportion中的参数调整对象的大小。的文件指出“Add()AddMany()wx.BoxSizer

[sizer 中的对象] 可以在两个方向(高度和宽度)上增长 [...] 这是由添加到 sizer 时赋予项目的比例参数决定的。它被解释为权重因子,即它可以为零,表示窗口可能根本不会调整大小,或者高于零。

(重点补充)

在您的情况下,您已经将比例设置为 0 并且您甚至没有使用 awx.BoxSizer所以这对您来说不是问题,但是将来要记住这一点。

于 2012-09-23T02:43:19.030 回答