wxpython:用另一个 wx.panel 覆盖 wx.panel 但新面板没有正确调整大小
wxpython: overlay wx.panel with another wx.panel but new panel doesn't resize right
我有一个带分离器和 2 个面板的框架。其中一个面板(右边一个 = choosePanel)有一个按钮,它应该在 choosepanel 的相同位置打开一个新面板(信息面板)。我使用了这个技巧(wxPython: Good way to overlay a wx.Panel on an existing wx.Panel)。
这部分有效。但是信息面板没有正确调整大小。当我在选择面板的位置添加这个硬编码的面板时,它就可以工作了。
但是当我使用覆盖技术时,发生了一些事情。
代码:
class Main(wx.Frame):
def __init__(self, parent=None, id=-1, notify_channel="browser_view",**kwargs):
wx.Frame.__init__(self, parent, id, config.programname)
self.parent = parent
self.notify_channel = notify_channel
pub.subscribe(self.on_message, notify_channel)
self.backgroundpanel = wx.Panel(self, wx.ID_ANY)
self.splitter = wx.SplitterWindow(self.backgroundpanel, wx.ID_ANY, style=wx.SP_LIVE_UPDATE | wx.SP_BORDER)# style=wwx.SP_LIVE_UPDATE : Don't draw XOR line but resize the child windows immediately.
self.filter = filter_view.Main(self.splitter, wx.ID_ANY, notify_channel=self.notify_channel)
self.menubar = menubar_view.Main(self, wx.ID_ANY, notify_channel=self.notify_channel)
self.statusbar = self.CreateStatusBar()
self.ChoosePanel = choosePanel_view.Main(self.splitter, wx.ID_ANY)
# self.ChoosePanel = cellinfo_view.Main(self.splitter, wx.ID_ANY, notify_channel="cellinfo_view")
self._do_layout()
self._do_bindings()
self.Maximize()
self.Show()
def _do_layout(self):
self.backgroundsizer = wx.BoxSizer()
self.sizer = wx.BoxSizer(wx.HORIZONTAL)
self.backgroundsizer.Add(self.backgroundpanel, 1, wx.EXPAND)
self.SetMenuBar(self.menubar)
self.sizer.Add(self.splitter, 1, wx.EXPAND)
self.backgroundpanel.SetSizer(self.sizer)
self.sizer.Fit(self.backgroundpanel)
self.SetSizer(self.backgroundsizer)
self.backgroundsizer.Fit(self)
self.splitter.SplitVertically(self.filter, self.ChoosePanel, 500)
self.splitter.SetMinimumPaneSize(50)
当我点击选择面板中的按钮时,有一条返回此文件的 pubsub 消息:
def on_cellinfo_panel(self,message):
# print self.ChoosePanel.GetPosition()
self.ChoosePanel.Hide()
self.cellinfo = cellinfo_view.Main(self.splitter, wx.ID_ANY, notify_channel="cellinfo_view", style=wx.EXPAND)
self.cellinfo.SetPosition((504, 0))
self.cellinfo.Layout()
切换这两个:
self.ChoosePanel = choosePanel_view.Main(self.splitter, wx.ID_ANY)
# self.ChoosePanel = cellinfo_view.Main(self.splitter, wx.ID_ANY, notify_channel="cellinfo_view")
我已经用另一种方法解决了这个问题。我在拆分器中仍然有 self.ChoosePanel。但我没有打开新面板,而是在 self.choosepanel 中添加了第二个面板 (self.cellinfo),但隐藏了。
因此,当调用 self.choosepanel 时,显示选择面板并隐藏 self.cellinfo 面板,单击按钮时隐藏选择面板并显示 self.cellinfo 面板。
我添加了一张图片以帮助理解我的解决方案。
我有一个带分离器和 2 个面板的框架。其中一个面板(右边一个 = choosePanel)有一个按钮,它应该在 choosepanel 的相同位置打开一个新面板(信息面板)。我使用了这个技巧(wxPython: Good way to overlay a wx.Panel on an existing wx.Panel)。
这部分有效。但是信息面板没有正确调整大小。当我在选择面板的位置添加这个硬编码的面板时,它就可以工作了。 但是当我使用覆盖技术时,发生了一些事情。
代码:
class Main(wx.Frame):
def __init__(self, parent=None, id=-1, notify_channel="browser_view",**kwargs):
wx.Frame.__init__(self, parent, id, config.programname)
self.parent = parent
self.notify_channel = notify_channel
pub.subscribe(self.on_message, notify_channel)
self.backgroundpanel = wx.Panel(self, wx.ID_ANY)
self.splitter = wx.SplitterWindow(self.backgroundpanel, wx.ID_ANY, style=wx.SP_LIVE_UPDATE | wx.SP_BORDER)# style=wwx.SP_LIVE_UPDATE : Don't draw XOR line but resize the child windows immediately.
self.filter = filter_view.Main(self.splitter, wx.ID_ANY, notify_channel=self.notify_channel)
self.menubar = menubar_view.Main(self, wx.ID_ANY, notify_channel=self.notify_channel)
self.statusbar = self.CreateStatusBar()
self.ChoosePanel = choosePanel_view.Main(self.splitter, wx.ID_ANY)
# self.ChoosePanel = cellinfo_view.Main(self.splitter, wx.ID_ANY, notify_channel="cellinfo_view")
self._do_layout()
self._do_bindings()
self.Maximize()
self.Show()
def _do_layout(self):
self.backgroundsizer = wx.BoxSizer()
self.sizer = wx.BoxSizer(wx.HORIZONTAL)
self.backgroundsizer.Add(self.backgroundpanel, 1, wx.EXPAND)
self.SetMenuBar(self.menubar)
self.sizer.Add(self.splitter, 1, wx.EXPAND)
self.backgroundpanel.SetSizer(self.sizer)
self.sizer.Fit(self.backgroundpanel)
self.SetSizer(self.backgroundsizer)
self.backgroundsizer.Fit(self)
self.splitter.SplitVertically(self.filter, self.ChoosePanel, 500)
self.splitter.SetMinimumPaneSize(50)
当我点击选择面板中的按钮时,有一条返回此文件的 pubsub 消息:
def on_cellinfo_panel(self,message):
# print self.ChoosePanel.GetPosition()
self.ChoosePanel.Hide()
self.cellinfo = cellinfo_view.Main(self.splitter, wx.ID_ANY, notify_channel="cellinfo_view", style=wx.EXPAND)
self.cellinfo.SetPosition((504, 0))
self.cellinfo.Layout()
切换这两个:
self.ChoosePanel = choosePanel_view.Main(self.splitter, wx.ID_ANY)
# self.ChoosePanel = cellinfo_view.Main(self.splitter, wx.ID_ANY, notify_channel="cellinfo_view")
我已经用另一种方法解决了这个问题。我在拆分器中仍然有 self.ChoosePanel。但我没有打开新面板,而是在 self.choosepanel 中添加了第二个面板 (self.cellinfo),但隐藏了。
因此,当调用 self.choosepanel 时,显示选择面板并隐藏 self.cellinfo 面板,单击按钮时隐藏选择面板并显示 self.cellinfo 面板。
我添加了一张图片以帮助理解我的解决方案。