【问题标题】:Fill frame wxpython填充框架 wxpython
【发布时间】:2014-08-28 01:27:04
【问题描述】:

我正在 wxpython 中创建一个 GUI,并且遇到了一个我无法解决的问题。所有面板和标签都使用 wx.ENABLED 和 1 作为比例,但它仍然不会将我的面板最大化到窗口。我认为我至少必须能够水平拉伸它们。

框架:

import wx

class MyFrame2 ( wx.Frame ):

    def __init__( self, parent ):
        wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 500,300 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )

        self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )

        winSizer = wx.FlexGridSizer( 1, 2, 0, 0 )
        winSizer.SetFlexibleDirection( wx.BOTH )
        winSizer.SetNonFlexibleGrowMode( wx.FLEX_GROWMODE_SPECIFIED )

        self.leftPanel = wx.Panel( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )
        gSizer6 = wx.GridSizer( 2, 1, 0, 0 )

        self.someInput = wx.TextCtrl( self.leftPanel, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
        gSizer6.Add( self.someInput, 1, wx.ALL|wx.EXPAND, 5 )

        self.leftButton = wx.Button( self.leftPanel, wx.ID_ANY, u"MyButton", wx.DefaultPosition, wx.DefaultSize, 0 )
        gSizer6.Add( self.leftButton, 1, wx.ALL|wx.EXPAND, 5 )


        self.leftPanel.SetSizer( gSizer6 )
        self.leftPanel.Layout()
        gSizer6.Fit( self.leftPanel )
        winSizer.Add( self.leftPanel, 1, wx.ALL|wx.EXPAND, 5 )

        self.rightPanel = wx.Panel( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )
        fgSizer14 = wx.FlexGridSizer( 2, 1, 0, 0 )
        fgSizer14.SetFlexibleDirection( wx.BOTH )
        fgSizer14.SetNonFlexibleGrowMode( wx.FLEX_GROWMODE_SPECIFIED )

        self.innerPanel = wx.Panel( self.rightPanel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )
        gSizer8 = wx.GridSizer( 0, 2, 0, 0 )

        self.someText = wx.StaticText( self.innerPanel, wx.ID_ANY, u"Bla bla", wx.DefaultPosition, wx.DefaultSize, 0 )
        self.someText.Wrap( -1 )
        gSizer8.Add( self.someText, 1, wx.ALL|wx.EXPAND, 5 )


        self.innerPanel.SetSizer( gSizer8 )
        self.innerPanel.Layout()
        gSizer8.Fit( self.innerPanel )
        fgSizer14.Add( self.innerPanel, 1, wx.EXPAND |wx.ALL, 5 )

        self.rightButton = wx.Button( self.rightPanel, wx.ID_ANY, u"MyButton", wx.DefaultPosition, wx.DefaultSize, 0 )
        fgSizer14.Add( self.rightButton, 1, wx.ALL|wx.EXPAND, 5 )


        self.rightPanel.SetSizer( fgSizer14 )
        self.rightPanel.Layout()
        fgSizer14.Fit( self.rightPanel )
        winSizer.Add( self.rightPanel, 1, wx.ALL|wx.EXPAND, 5 )


        self.SetSizer( winSizer )
        self.Layout()

        self.Centre( wx.BOTH )

    def __del__( self ):
        pass

最大化打开窗口时:

最小化打开窗口时:

为什么当我最小化窗口而不使用最大化的窗口时它会起作用?所有属性都被拉伸和展开。

【问题讨论】:

    标签: python window wxpython panel expand


    【解决方案1】:

    我发现FlexGridSizer 有两个属性名为growablerowsgrowablecols。 这些属性采用一个索引列表,指示应该能够扩展哪些行和/或列,这就是诀窍。

    如果没有行/列被明确设置为可增长,FlexGridSizer 将始终尽可能紧凑地打包所有元素。

    【讨论】:

    • 必须等两天才能接受,但如果可以的话我会这样做的:)
    猜你喜欢
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-02
    • 1970-01-01
    • 1970-01-01
    • 2015-03-15
    • 2012-05-01
    相关资源
    最近更新 更多