开始学习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中的两个面板没有像我想要的那样扩展。这是一个picture。
我想要的是两个面板扩展到黑色部分的面板的其余部分 比绿色面板宽度小。无法为我的生活找到解决方案。
我打算让这两个面板都有自己的特殊实例,因为它们会发生一些事情,但就目前而言,我希望在开始进入细节之前尽可能简单地实现它们。
答案 0 :(得分:1)
你忘记了一些比例:
# 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)
答案 1 :(得分:0)
您在几行代码中提供了错误的parameters to the Add
方法
Add
的第二个参数是小部件应该是整数的比例(通常为1, fill,因为您可以保持比例,或者0,保持最小尺寸)。你在某些方面错过了它。实际上,这个参数取值wx.EXPAND
实际上是第三个参数的常量,它也作为副作用丢失了。
如果您希望Panel
小于另一个(例如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)