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 中的两个面板没有像我希望的那样扩展。这是一张图片

我想要的是两个面板扩展到面板的其余部分,黑色部分在宽度上小于绿色面板。无法为我的生活找到解决方案。

我计划让这两个面板有自己的特殊实例,因为它们中会发生一些事情,但现在,我希望在开始讨论细节之前尽可能简单地实现它们。

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只包含一个条目,这使得它变得多余。也试着给你的sizer命名一些有意义的名字,让它更容易阅读。

最后但同样重要的是,如果您希望用户能够动态调整两个面板(树和条目)的比例,您可以使用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
的第二个参数Add是小部件的比例,应该是整数(通常为 1,尽可能保持比例填充,或 0,保持最小尺寸)。你在某些方面错过了它。实际上,这个参数取的值wx.EXPAND实际上是用于第三个参数的常量,它也作为副作用丢失了。

如果您希望 aPanel小于另一个(例如 50%),您可以分别为较小和较大的面板指定值 1 和 2。

这适用于带有Phoenix的 Python 3.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 回答