【问题标题】:wxpython: overlay wx.panel with another wx.panel but new panel doesn't resize rightwxpython:用另一个 wx.panel 覆盖 wx.panel,但新面板不能正确调整大小
【发布时间】:2017-07-02 21:34:48
【问题描述】:

我有一个带有 2 个面板的分离器的框架。这些面板之一(右侧=选择面板)有一个按钮,该按钮应在选择面板的同一位置打开一个新面板(信息面板)。我使用了这种技术 (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")

【问题讨论】:

    标签: wxpython splitter


    【解决方案1】:

    我已经用另一种方法解决了这个问题。我仍然在拆分器中有 self.ChoosePanel。但是我没有打开一个新面板,而是在 self.choosepanel 中添加了第二个面板(self.cellinfo),但被隐藏了。

    所以当调用self.choosepanel时,choisepanel被显示,self.cellinfo面板被隐藏,当点击按钮时,选择面板被隐藏,self.cellinfo面板被显示。

    我添加了一张图片来帮助理解我的解决方案。

    【讨论】:

      猜你喜欢
      • 2011-03-29
      • 2010-11-05
      • 1970-01-01
      • 1970-01-01
      • 2014-02-20
      • 2013-08-25
      • 1970-01-01
      • 1970-01-01
      • 2010-11-05
      相关资源
      最近更新 更多