wxPython:BoxSizer中的项目不会水平扩展,只能垂直扩展

发布于 2021-01-29 15:25:34

我在各种大小调整器中都有几个按钮,它们以我希望它们扩展的方式扩展。但是,当我将父项添加到用于在框架中所有元素周围添加边框的新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,并显示我期望所有功能如何运行(当然没有空白)。

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

关注者
0
被浏览
41
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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

    如果您有VERTICAL
    BoxSizer,则wx.EXPAND将使控件水平填充,而比例为1或更大(添加的第二个参数)将使控件垂直填充。对于水平BoxSizers,则相反。

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

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

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

    剩下的我留给你。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看