使用BoxSizer构建面板后调整面板大小

时间:2017-03-22 23:55:21

标签: python panel wxwidgets boxsizer

我有一种情况,我必须在面板中创建一个包含内容的面板,然后在创建面板后,我需要调整它的大小。 面板的大小取决于子内容,当您创建子内容时,您需要指定父面板;像鸡和鸡蛋的问题。 所以,我需要创建面板及其内容,然后根据内容调整面板的大小......

所以,我做了一个模拟代码示例,其中面板以50 x 50开始,并且在以该尺寸构建它之后,我希望它变为400 x 400。 但是,当你在计算机上运行它时,你只看到50 x 50. SetSize((400,400))没有效果!

如何修复此问题并使SetSize在应用sizer后生效? 任何帮助都是适用的......

import wx

class MainFrame(wx.Frame):

    def __init__(self):

        wx.Frame.__init__(self, None, id = -1, title = 'Hello, World!', size = (500, 500))

        self.__myPanel = wx.Panel(self, size = (50, 50), style = wx.SIMPLE_BORDER)

    def test(self):

        self.__myPanel.SetSize((400, 400))

        vertBoxSizer = wx.BoxSizer(wx.VERTICAL)

        vertBoxSizer.AddSpacer((0, 10))
        vertBoxSizer.Add(self.__myPanel, 0, wx.ALL, 0)

        self.SetSizer(vertBoxSizer)

        self.Layout()

if __name__ == '__main__':
    app = wx.App()

    frame = MainFrame()    
    frame.test()

    frame.Show(True)
    app.MainLoop()

    print 'Exiting...'

2 个答案:

答案 0 :(得分:0)

没有鸡肉和鸡蛋,因为窗户和大小不是父母/孩子相关的。 Sizer是一个非常好的工具(它们不是窗户!),用于调整窗户尺寸。

如果您的面板是框架中唯一的子面板,则不需要sizer:面板的大小将适合其父框架的客户区域。

如果你想要设置sizer的窗口在sizer需要的时候改变它的大小(可能是由于yo确实在大小由该sizer管理的面板中使用了SetSize()),只需调用Fit( ),test {)函数中的self.Fit()

我建议阅读official docs for window sizing

答案 1 :(得分:0)

MainFrame(wx.Frame)类:

def __init__(self):

    wx.Frame.__init__(self, None, id = -1, title = 'Hello, World!', size = (500, 500))

    self.__myPanel = wx.Panel(self, size = (50, 50), style = wx.SIMPLE_BORDER)

def test(self):

    self.__myPanel.SetSize((400, 400))

    vertBoxSizer = wx.BoxSizer(wx.VERTICAL)

    vertBoxSizer.AddSpacer((0, 10))
    vertBoxSizer.Add(self.__myPanel, 0, wx.ALL, 0)

    self.SetSizer(vertBoxSizer)

    self.Layout() 

self.Fit()