【问题标题】:wxpython: Hide one of splitterWindow panelswxpython:隐藏 splitterWindow 面板之一
【发布时间】:2015-05-05 06:52:53
【问题描述】:

我有一个包含 wx.SplitterWindow 的框架,其中有两个面板作为其子级。我想用一个按钮(显示/隐藏按钮)单击隐藏其中一个面板,即第一个面板应该隐藏,第二个面板应该占据整个框架,而窗扇消失了。再次单击该按钮应该会显示隐藏的面板,并且窗扇会回到原位。这可能吗?

我搜索了文档,似乎没有具体的方法可以做到这一点?这是如何实现的。

import wx
class MainFrame(wx.Frame):
    """"""

    #----------------------------------------------------------------------
    def __init__(self):
        wx.Frame.__init__(self, None, title="test", size=(800,600))

        self.splitter = wx.SplitterWindow(self, wx.ID_ANY)
        self.panelOne = wx.Panel(self.splitter,1)
        self.panelTwo = wx.Panel(self.splitter,1)
        self.panelOne.SetBackgroundColour('sky blue')
        self.panelTwo.SetBackgroundColour('pink')
        self.splitter.SplitHorizontally(self.panelOne, self.panelTwo)
        self.splitter.SetMinimumPaneSize(20)

        self.buttonpanel = wx.Panel(self, 1)
        self.buttonpanel.SetBackgroundColour('white')
        self.mybutton = wx.Button(self.buttonpanel,label = "Hide")
        self.Bind(wx.EVT_BUTTON, self.show_hide, self.mybutton)

        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(self.splitter, 2, wx.EXPAND)
        self.sizer.Add(self.buttonpanel, 0, wx.EXPAND)
        self.SetSizer(self.sizer)

    def show_hide(self, event):
        label = self.mybutton.GetLabel()
        if label == "Hide":
            ### How to Hide panelOne ??
            self.mybutton.SetLabel("Show")
        if label == "Show":
            ### How to Show panelOne ??
            self.mybutton.SetLabel("Hide")


if __name__ == "__main__":
    app = wx.App(False)
    frame = MainFrame()
    frame.Show()
    app.MainLoop()

【问题讨论】:

    标签: python python-2.7 wxpython show-hide


    【解决方案1】:

    阅读documentation 几秒钟后,我注意到Unsplit 方法。您可以使用它来取出 panelOne。然后当你想再次显示它时,你只需再次拆分SplitterWindow

    import wx
    class MainFrame(wx.Frame):
        """"""
    
        #----------------------------------------------------------------------
        def __init__(self):
            wx.Frame.__init__(self, None, title="test", size=(800,600))
    
            self.splitter = wx.SplitterWindow(self, wx.ID_ANY)
            self.panelOne = wx.Panel(self.splitter,1)
            self.panelTwo = wx.Panel(self.splitter,1)
            self.panelOne.SetBackgroundColour('sky blue')
            self.panelTwo.SetBackgroundColour('pink')
            self.splitter.SplitHorizontally(self.panelOne, self.panelTwo)
            self.splitter.SetMinimumPaneSize(20)
    
            self.buttonpanel = wx.Panel(self, 1)
            self.buttonpanel.SetBackgroundColour('white')
            self.mybutton = wx.Button(self.buttonpanel,label = "Hide")
            self.Bind(wx.EVT_BUTTON, self.show_hide, self.mybutton)
    
            self.sizer = wx.BoxSizer(wx.VERTICAL)
            self.sizer.Add(self.splitter, 2, wx.EXPAND)
            self.sizer.Add(self.buttonpanel, 0, wx.EXPAND)
            self.SetSizer(self.sizer)
    
        def show_hide(self, event):
            label = self.mybutton.GetLabel()
            if label == "Hide":
                ### How to Hide panelOne ??
                self.mybutton.SetLabel("Show")
                self.splitter.Unsplit(self.panelOne)
            if label == "Show":
                ### How to Show panelOne ??
                self.splitter.SplitHorizontally(self.panelOne, self.panelTwo)
                self.mybutton.SetLabel("Hide")
    
    
    
    if __name__ == "__main__":
        app = wx.App(False)
        frame = MainFrame()
        frame.Show()
        app.MainLoop()
    

    注意:您在代码末尾停止了对MainLoop 的调用。这使您的示例无法运行。

    【讨论】:

    • 感谢您的回答!
    猜你喜欢
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多