wxpython:隐藏其中一个拆分窗口面板

2024-09-24 02:28:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个相框wx.拆分窗口有两个面板作为子面板。我想用一个按钮(显示/隐藏按钮)来隐藏其中一个面板,也就是说,第一个面板应该隐藏,第二个面板应该在窗框消失的情况下占据整个框架。再次单击该按钮将显示隐藏面板,并将窗扇恢复原位。这可能吗?在

我已经搜索了文档,但似乎没有具体的方法来实现这一点?如何才能做到这一点。在

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

Tags: self面板show按钮labelhidewxpanel
1条回答
网友
1楼 · 发布于 2024-09-24 02:28:03

在阅读了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的调用。这使您的示例无法运行。在

相关问题 更多 >