2017-02-14 4 views
0

私は2つのパネルを持つスプリッター付きのフレームを持っています。これらのパネルの1つ(right one = choosePanel)には、choosepanelの同じ場所に新しいパネル(infopanel)を開くボタンがあります。私はこのテクニックを使用しました(wxPython: Good way to overlay a wx.Panel on an existing wx.Panel)。wxpython:別のwx.panelでオーバーレイwx.panelをオーバーライドしましたが、新しいパネルのサイズが変更されません

この部分は動作します。しかし、infopanelは右にサイズ変更されません。私がこのパネルをchoosepanelの代わりに追加した場合、それは機能します。 しかし、私がオーバーレイ技術を使うと何かが起こります。

コード:

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

NOT GOOD:when clicking the cellinfo button

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) 

my startscreen, with choosepanel

私はchoosepanelにあるボタンをクリックして、このファイルに戻ってこれに対するのpubsubメッセージがあります

これらを切り替える2:

self.ChoosePanel = choosePanel_view.Main(self.splitter, wx.ID_ANY) 
    # self.ChoosePanel = cellinfo_view.Main(self.splitter, wx.ID_ANY, notify_channel="cellinfo_view") 

GOOD:the way it should be, only this is added hardcoded in the def iniit of the main class

答えて

0

私は別のアプローチでこの問題を解決してきました。私はまだ自分自身を持っています。スプリッターにパネルを選択してください。しかし、新しいパネルを開く代わりに、self.choosepanelに2番目のパネル(self.cellinfo)を追加しましたが、非表示にしました。

self.choosepanelを呼び出すと、choisepanelが表示され、self.cellinfoパネルが非表示になり、ボタンをクリックすると選択パネルが非表示になり、self.cellinfoパネルが表示されます。

解決策を理解するのに役立つ画像を追加しました。 enter image description here

関連する問題