如何在wxPython中更好地控制窗口大小

时间:2014-07-31 05:28:09

标签: python user-interface text wxpython size

我正在尝试使用wxPython构建GUI。 (顺便说一句,这个问题来自于工作,而我正在家里打字,因为我无法从工作中访问此网站。也许这就是防火墙问题?无论如何,这就是为什么我会这样做的原因从内存中执行此操作并且无法提供任何屏幕截图。)我的第一个控件集合是垂直堆栈。静态文本位于顶部。下面是一个BoxSizer,它包含三个水平添加的文本控件。下面是另一个静态文本。底部是一个最终的文本控件。问题是BoxSizer中的三个文本控件。如果我在没有比例参数的情况下添加它们,一切看起来都很好。但我希望它们的尺寸不同。所以,当我添加比例参数(4,3和16,如果这很重要)时,三个文本控件变得太大并且大大增加了帧的宽度。底部文本控件也扩展为等于三个顶部文本控件的长度。所以,如果我放弃三个文本控件的比例,我可以得到一切正确的整体大小。或者,如果我放弃我想要的整体水平尺寸,我可以将它们的比例调到正确的位置。但我真的需要两者。有办法吗?感谢。

1 个答案:

答案 0 :(得分:0)

一些代码示例会有很多帮助。

我无法理解如何设置sizer中小部件的比例会增加框架的宽度!

无论如何,您可以在创建文本控件小部件时设置它们的大小,这可能会解决比例和整体大小问题。您只需要事先计算出合适的尺寸。

如果它有任何帮助,这里是一个框架示例,其中包含您提供的规范:

import wx

class Frame ( wx.Frame ):

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

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

        sizer = wx.BoxSizer( wx.VERTICAL )

        self.panel = wx.Panel( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )
        sizer_0 = wx.BoxSizer( wx.VERTICAL )

        self.static_text_top = wx.StaticText( self.panel, wx.ID_ANY, u"Something Something", wx.DefaultPosition, wx.DefaultSize, 0 )
        self.static_text_top.Wrap( -1 )
        sizer_0.Add( self.static_text_top, 0, wx.ALL, 5 )

        sizer_01 = wx.BoxSizer( wx.HORIZONTAL )

        self.textCtrl1 = wx.TextCtrl( self.panel, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
        sizer_01.Add( self.textCtrl1, 4, wx.ALL, 5 )

        self.textCtrl2 = wx.TextCtrl( self.panel, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
        sizer_01.Add( self.textCtrl2, 3, wx.ALL, 5 )

        self.textCtrl3 = wx.TextCtrl( self.panel, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
        sizer_01.Add( self.textCtrl3, 16, wx.ALL, 5 )


        sizer_0.Add( sizer_01, 0, wx.EXPAND, 0 )

        self.static_text_middle = wx.StaticText( self.panel, wx.ID_ANY, u"Something else", wx.DefaultPosition, wx.DefaultSize, 0 )
        self.static_text_middle.Wrap( -1 )
        sizer_0.Add( self.static_text_middle, 0, wx.ALL, 5 )

        self.textCtrl4 = wx.TextCtrl( self.panel, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
        sizer_0.Add( self.textCtrl4, 1, wx.ALL|wx.EXPAND, 5 )


        self.panel.SetSizer( sizer_0 )
        self.panel.Layout()
        sizer_0.Fit( self.panel )
        sizer.Add( self.panel, 1, wx.EXPAND |wx.ALL, 0 )


        self.SetSizer( sizer )
        self.Layout()

        self.Centre( wx.BOTH )
        self.Show()

if __name__ == "__main__":
    app = wx.App()
    Frame()
    app.MainLoop()