gpt4 book ai didi

python - wxPython 嵌套面板和 Sizer

转载 作者:太空宇宙 更新时间:2023-11-04 01:30:48 26 4
gpt4 key购买 nike

开始学习 wxPython,以便我可以制作应用程序。我特别遇到嵌套 sizer 的问题。

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 .

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

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

最佳答案

你忘记了一些比例:

# 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)

关于python - wxPython 嵌套面板和 Sizer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14008494/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com