0

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

因此,我制作了一个模拟代码示例,面板从 50 x 50 开始,在以该尺寸构建后,我希望它改为 400 x 400。但是,当您在计算机上运行它时,您只需将其视为 50 x 50。 SetSize((400, 400)) 无效!

应用 sizer 后如何解决这个问题并使 SetSize 生效?任何帮助表示赞赏...

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...'
4

2 回答 2

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()

于 2019-07-22T09:38:37.993 回答
0

没有鸡和蛋,因为 windows 和 sizers 与父母/孩子无关。Sizer 是一个非常好的工具(它们不是窗口!)用于调整窗口大小。

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

如果您希望设置 sizer 的窗口在 sizer 需要时更改其大小(可能是因为您确实在大小由该 sizer 管理的面板中使用了 SetSize()),只需self.Fit()在 test() 中调用 Fit()功能。

我建议阅读有关窗口大小的官方文档

于 2017-03-23T00:25:38.140 回答