Wxpython 使用哪种尺寸器以及如何实现?(凤凰卫视)

Wxpython 使用哪种尺寸器以及如何实现?(凤凰卫视),wxpython,Wxpython,我有5个小部件,我需要在面板上布局 我想要的布局是: StaticText: TextCtrl StaticText: TextCtrl Button 我需要整个实施过程。你会得到我对最干净解决方案的支持 然而,我的尝试有点不成熟 sizer1 = wx.BoxSizer(orient=wx.HORIZONTAL) sizer2 = wx.BoxSizer(orient=wx.HORIZONTAL) sizer3 = wx.BoxSizer(orient=wx.V

我有5个小部件,我需要在面板上布局

我想要的布局是:

StaticText:    TextCtrl
StaticText:    TextCtrl
         Button
我需要整个实施过程。你会得到我对最干净解决方案的支持

然而,我的尝试有点不成熟

sizer1 = wx.BoxSizer(orient=wx.HORIZONTAL)
sizer2 = wx.BoxSizer(orient=wx.HORIZONTAL)
sizer3 = wx.BoxSizer(orient=wx.VERTICAL)

sizer1.Add(window=labelOfTextFieldForURL,
           border=5,
           flag=wx.ALL | wx.ALIGN_CENTER)
sizer1.Add(window=self.textFieldForURL,
           border=5,
           flag=wx.ALL | wx.ALIGN_CENTER)

sizer2.Add(window=labelOfTextFieldForSearchTerm,
           border=5,
           flag=wx.ALL | wx.ALIGN_CENTER)
sizer2.Add(window=self.textFieldForSearchTerm,
           border=5,
           flag=wx.ALL | wx.ALIGN_CENTER)

sizer3.AddStretchSpacer()
sizer3.Add(sizer=sizer1,
           border=5,
           flag=wx.ALL | wx.ALIGN_CENTER)
sizer3.Add(sizer=sizer2,
           border=5,
           flag=wx.ALL | wx.ALIGN_CENTER)
sizer3.Add(window=buttonCount,
           border=5,
           flag=wx.ALL | wx.ALIGN_CENTER)
sizer3.AddStretchSpacer()

panel.SetSizer(sizer3)
panel.Layout()

下面是一个简单的应用程序,可以快速概述如何实现布局。有关说明,请参见代码注释

import wx

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

        # create a flex grid sizer with 3 rows and 2 columns, 0 gaps between rows and columns
        flex_grid_sizer = wx.FlexGridSizer(3, 2, 0, 0)
        # make the TextCtrls expand
        flex_grid_sizer.AddGrowableCol(1)
        flex_grid_sizer.SetFlexibleDirection(wx.HORIZONTAL)
        flex_grid_sizer.SetNonFlexibleGrowMode(wx.FLEX_GROWMODE_ALL)

        # Start Row 1
        self.static_text_1 = wx.StaticText(self, wx.ID_ANY, "Static Text", wx.DefaultPosition, wx.DefaultSize, 0)
        self.static_text_1.Wrap(-1)
        flex_grid_sizer.Add(self.static_text_1, 0, wx.ALL | wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL, 5)

        self.textctrl_1 = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0)
        flex_grid_sizer.Add(self.textctrl_1, 1,
                            wx.ALL | wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, 5)

        # Start Row 2
        self.stat_text_2 = wx.StaticText(self, wx.ID_ANY, "Static Text", wx.DefaultPosition, wx.DefaultSize, 0)
        self.stat_text_2.Wrap(-1)
        flex_grid_sizer.Add(self.stat_text_2, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_CENTER_HORIZONTAL, 5)

        self.textctrl_2 = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0)
        flex_grid_sizer.Add(self.textctrl_2, 1,
                            wx.ALL | wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, 5)

        # Start Row 3
        # Add a spacer to center the bytton
        flex_grid_sizer.AddStretchSpacer()

        self.button = wx.Button(self, wx.ID_ANY, "A Button", wx.DefaultPosition, wx.DefaultSize, 0)
        flex_grid_sizer.Add(self.button, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_CENTER_HORIZONTAL, 5)

        self.SetSizer(flex_grid_sizer)
        self.Layout()

        self.Centre(wx.BOTH)


app = wx.App()
frame = TestFrame()
frame.Show()
app.MainLoop()

您遇到了什么问题或错误?没有,我只是想要一个更干净的解决方案,可能是使用FlexGridSizer。这太复杂了。这个问题不适合stackoverflow,请看,您在这里会得到更好的接待