Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
wxPython:BoxSizer don';不能水平扩展,只能垂直扩展_Python_Wxpython_Wxwidgets - Fatal编程技术网

wxPython:BoxSizer don';不能水平扩展,只能垂直扩展

wxPython:BoxSizer don';不能水平扩展,只能垂直扩展,python,wxpython,wxwidgets,Python,Wxpython,Wxwidgets,我有几个不同大小的按钮,它们以我想要的方式展开。但是,当我将父对象添加到新的wx.BoxSizer(用于在框架中的所有元素周围添加边框)时,已添加的大小调整器在垂直方向上正常工作,但在水平方向上不能正常工作 以下代码演示了该问题: #! /usr/bin/env python import wx import webbrowser class App(wx.App): def OnInit(self): frame = MainFrame() fram

我有几个不同大小的按钮,它们以我想要的方式展开。但是,当我将父对象添加到新的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,并显示我希望所有内容都能正常工作(当然没有空格)


我完全陷入了这个问题,仍然不知道如何解决它。

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

如果使用垂直BoxSizer,wx.EXPAND将使控件水平填充,而比例为1或更多(要添加的第二个参数)将使控件垂直填充。这是相反的水平盒大小

sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(widget1, 0, wx.EXPAND)
sizer.Add(widget2, 1)
widget1将水平扩展。widget2将垂直展开

如果你把一个尺码器放在另一个尺码器中,你需要确保设置了它的比例和扩展标志,这样它的内部就会按照你想要的方式增长

剩下的就交给你了