2017-04-02 7 views
-1

私はパネルにレイアウトする必要がある5つのウィジェットを持っています。私は全体の実装が必要どのサイザを使用して実装するのですか? (wxPython Phoenix)

StaticText: TextCtrl 
StaticText: TextCtrl 
     Button 

私の希望のレイアウトはこれです。あなたは私のupvoteを清潔な解決策にします。

しかし、私の試みはちょっとハッキリです。

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() 
+0

何を試しましたか......? – user2682863

+0

どのような問題やエラーが発生しましたか? – user2682863

+0

なし、私はちょうどFlexGridSizerを使用して、よりクリーンなソリューションを望んでいます。 –

答えて

0

ここでは、レイアウトを達成する方法の概要を簡単に説明しています。説明のコードコメントを参照

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() 
+0

これはあまりにも複雑です。 –

+0

この質問は、stackoverflowにはあまり適していません。http://stackoverflow.com/help/on-topicを参照してください。http://codereview.stackexchange.com/ – user2682863

関連する問題