【问题标题】:wxPython: Items in BoxSizer don't expand horizontally, only verticallywxPython:BoxSizer 中的项目不会水平扩展,只会垂直扩展
【发布时间】:2010-11-19 19:37:48
【问题描述】:

我有几个不同尺寸的按钮,它们以我想要的方式扩展。但是,当我将父级添加到用于在框架中的所有元素周围添加边框的新 wx.BoxSizer 时,已添加的大小调整器在垂直方向上正常工作,但在水平方向上却不行。

下面的代码演示了这个问题:

#! /usr/bin/env python

import wx
import webbrowser

class App(wx.App):


    def OnInit(self):
       frame = MainFrame()
       frame.Show()
       self.SetTopWindow(frame)
       return True


class MainFrame(wx.Frame):

    title = 'Title'


    def __init__(self):
        wx.Frame.__init__(self, None, -1, self.title)

        panel = wx.Panel(self)

        #icon = wx.Icon('icon.png', wx.BITMAP_TYPE_PNG)
        #self.SetIcon(icon)

        sizer = wx.FlexGridSizer(rows=2, cols=1, vgap=10, hgap=10)

        button1 = wx.Button(panel, -1, 'BUTTON')
        sizer.Add(button1, 0, wx.EXPAND)

        buttonSizer = wx.FlexGridSizer(rows=1, cols=4, vgap=10, hgap=5)

        buttonDelete = wx.Button(panel, -1, 'Delete')
        buttonSizer.Add(buttonDelete, 0, 0)

        buttonEdit = wx.Button(panel, -1, 'Edit')
        buttonSizer.Add(buttonEdit, 0, 0)

        buttonNew = wx.Button(panel, -1, 'New')
        buttonSizer.Add(buttonNew, 0, 0)

        buttonSizer.AddGrowableCol(0, 0)

        sizer.Add(buttonSizer, 0, wx.EXPAND|wx.HORIZONTAL)

        sizer.AddGrowableCol(0, 0)
        sizer.AddGrowableRow(0, 0)

        mainSizer = wx.BoxSizer(wx.EXPAND)
        mainSizer.Add(sizer, 0, wx.EXPAND|wx.ALL, 10)

        #panel.SetSizerAndFit(sizer)
        #sizer.SetSizeHints(self)
        panel.SetSizerAndFit(mainSizer)
        mainSizer.SetSizeHints(self)


if __name__ == '__main__':
    app = App(False)
    app.MainLoop()

注释掉行 5758 并取消注释行 5556 会移除额外的 BoxSizer 并显示如何我希望一切都能正常运行(当然没有空格)。

我完全被这个问题所困扰,仍然不知道如何解决它。

【问题讨论】:

    标签: python wxpython wxwidgets


    【解决方案1】:

    首先,您错误地传递了一些标志。 BoxSizer 采用 wx.HORIZONTAL 或 wx.VERTICAL,而不是 wx.EXPAND。 sizer.Add 不需要 wx.HORIZONTAL。

    如果你有一个 VERTICAL BoxSizer,wx.EXPAND 将使控件水平填充,而 1 或更大的比例(Add 的第二个参数)将使控件垂直填充。 HORIZONTAL BoxSizer 则相反。

    sizer = wx.BoxSizer(wx.VERTICAL)
    sizer.Add(widget1, 0, wx.EXPAND)
    sizer.Add(widget2, 1)
    

    widget1 将水平扩展。 widget2 将垂直扩展。

    如果您将一个sizer 放在另一个sizer 中,您需要确保设置它的比例和EXPAND 标志,以便它的内部会按照您想要的方式增长。

    剩下的交给你。

    【讨论】:

      猜你喜欢
      • 2010-09-27
      • 2011-05-30
      • 1970-01-01
      • 2017-12-18
      • 2013-12-28
      • 2012-04-05
      • 1970-01-01
      • 1970-01-01
      • 2016-01-16
      相关资源
      最近更新 更多