2

アプリケーションを作成できるように、wxPythonの学習を開始しました。特にネストされたサイザーに問題があります。

class browser_mainPanel(wx.Panel):

   def __init__(self, parent):
     wx.Panel.__init__(self, parent=parent)
     self.toolbar()
     self.searchBar = wx.SearchCtrl(self)

     main_sizer = wx.BoxSizer(wx.HORIZONTAL)

     main_sizer2 = wx.BoxSizer(wx.VERTICAL)   
     main_sizer2.Add(self.toolBar, 0, wx.EXPAND, 5)   
     main_sizer2.Add(self.searchBar, 0, wx.EXPAND, 5)

     main_sizer.Add(main_sizer2, wx.EXPAND)

     tree_panel = wx.Panel(self)
     tree_panel.SetBackgroundColour(wx.BLACK)
     entry_panel = wx.Panel(self)
     entry_panel.SetBackgroundColour(wx.GREEN)

     main_sizer3 = wx.BoxSizer(wx.HORIZONTAL)
     main_sizer3.Add(tree_panel, 0, wx.EXPAND, 5)
     main_sizer3.Add(entry_panel, 0, wx.EXPAND, 5)
     main_sizer2.Add(main_sizer3, wx.EXPAND)
     self.SetSizer(main_sizer)

そうです、問題は、main_sizer3の2つのパネルが希望どおりに拡張されていないことです。これが写真です。

私が欲しいのは、2つのパネルをパネルの残りの部分に拡張し、黒い部分を緑のパネルよりも幅方向に小さくすることです。私の人生の解決策を見つけることができません。

これらの2つのパネルには何かが起こるため、独自の特別なインスタンスを作成する予定ですが、今のところ、詳細に入る前に、できるだけ簡単に実装することを検討しています。

4

2 に答える 2

2

あなたはいくつかの比率を忘れました:

# to use the last parameter (border), you have to
# specify which border(s) to use in the flag parameter:
# wx.TOP, wx.BOTTOM, wx.LEFT, wx.RIGHT, a combination
# of them, or wx.ALL
main_sizer2.Add(self.toolBar, 0, wx.EXPAND|wx.BOTTOM, 5)
main_sizer2.Add(self.searchBar, 0, wx.EXPAND|wx.LEFT|wx.RIGHT, 5)
# proportion missing:
main_sizer.Add(main_sizer2, 1, wx.EXPAND)
# set the green panel to twice the size of the black one
main_sizer3.Add(tree_panel, 1, wx.EXPAND|wx.RIGHT, 5)
main_sizer3.Add(entry_panel, 2, wx.EXPAND)
# and another proportion missing:
main_sizer2.Add(main_sizer3, 1, wx.EXPAND|wx.ALL, 5)

さらに、main_sizerエントリが1つしかないため、不要になります。また、読みやすくするために、サイザーにある程度意味のある名前を付けるようにしてください。

最後になりましたが、ユーザーが2つのパネル(ツリーとエントリ)の比率を動的にサイズ変更できるようにする場合は、wx.SplitterWindow:を使用できます。

# ...
layout = wx.BoxSizer(wx.VERTICAL)
layout.Add(self.toolBar, 0, wx.EXPAND|wx.BOTTOM, 5)
layout.Add(self.searchBar, 0, wx.EXPAND|wx.LEFT|wx.RIGHT,5)

splitter = wx.SplitterWindow(self,style=wx.SP_LIVE_UPDATE)

tree_panel = wx.Panel(splitter)
tree_panel.SetBackgroundColour(wx.BLACK)
entry_panel = wx.Panel(splitter)
entry_panel.SetBackgroundColour(wx.GREEN)

splitter.SplitVertically(tree_panel,entry_panel)
splitter.SetMinimumPaneSize(50)

layout.Add(splitter,1,wx.EXPAND|wx.ALL,5)
self.SetSizer(layout)
于 2012-12-23T11:49:47.487 に答える
1

コードの数行でメソッドに間違ったパラメーターを指定しています。Add
の2番目のパラメーターはAdd、整数である必要があるウィジェットの比率です(通常、1、比率を維持できるように塗りつぶす、または0、最小サイズを維持します)。あなたはいくつかの行でそれを逃しました。実際、このパラメーターは、wx.EXPAND実際には3番目のパラメーターに使用される定数であり、副作用として失われた値を取りました。

を他のパネルよりも小さくしたい場合Panel(たとえば、50%)、小さいパネルと大きいパネルにそれぞれ値1と2を指定できます。

これは、Phoenixを使用したPython3.2で機能します。

 main_sizer.Add(main_sizer2, 1, wx.EXPAND)

 tree_panel = wx.Panel(self)
 tree_panel.SetBackgroundColour(wx.BLACK)
 entry_panel = wx.Panel(self)
 entry_panel.SetBackgroundColour(wx.GREEN)

 main_sizer3 = wx.BoxSizer(wx.HORIZONTAL)     
 main_sizer3.Add(tree_panel, 1, wx.EXPAND, 5)     #smaller
 main_sizer3.Add(entry_panel, 2, wx.EXPAND, 5)    #bigger
 main_sizer2.Add(main_sizer3, 1, wx.EXPAND)
 self.SetSizer(main_sizer)

ここに画像の説明を入力してください

于 2012-12-23T11:39:14.950 に答える