wxPython:BoxSizer中的项目只能在垂直方向上扩展,而不能在水平方向上扩展

11

我有几个按钮位于不同的sizer中,它们以我想要的方式扩展。然而,当我将父级添加到新的wx.BoxSizer中时,该sizer在垂直方向上能够正确地起作用,但在水平方向上却不能。

以下代码演示了问题:

#! /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,并展示我期望的功能(当然不包括空白)。

我完全被这个问题卡住了,仍然不知道如何修复它。

1个回答

28

首先,您传递了一些错误的标志。BoxSizer接受wxHORIZONTAL或wxVERTICAL,而不是wxEXPAND。sizer.Add不接受wxHORIZONTAL。

如果您有一个垂直BoxSizer,wxEXPAND将使控件水平填充,而比例为1或更高(Add的第二个参数)将使控件垂直填充。对于水平BoxSizer,则相反。

sizer = wx.BoxSizer(wxVERTICAL)
sizer.Add(widget1, 0, wxEXPAND)
sizer.Add(widget2, 1)

widget1会水平扩展,widget2会垂直扩展。

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

剩下的就交给你了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接