【问题标题】:How to create a wxpython notebook with 2 panels splitted horizontally?如何创建一个水平拆分 2 个面板的 wxpython 笔记本?
【发布时间】:2013-12-16 00:32:12
【问题描述】:

我正在尝试构建如下内容:

这是一个有 2 个面板的笔记本,水平拆分。顶部的面板也被分成 2 个,每个拆分包含一个 wx.grid 对象。

我已经尝试了下面的代码,但是顶部面板上的 2 个网格没有显示出来:

class NoteBook(wx.Notebook):

    def __init__(self, parent, pages):

        wx.Notebook.__init__(self, parent, id=wx.ID_ANY, style= wx.BK_DEFAULT)
        self.parent = parent
        page = "TEST"

        self.splitter_window = wx.SplitterWindow(self)

        self.AddPage(self.splitter_window, page)
        title_name = page[1:]

        grid_panel = wx.Panel(self.splitter_window, style=wx.BORDER_THEME)
        grid_splitter = wx.SplitterWindow(grid_panel)

        grid_panel_1 = wx.Panel(grid_splitter, style=wx.BORDER_THEME)
        grid1 = grid_maker.GridArea(grid_panel_1)
        grid1.CreateGrid(page) #create the grid 1
        grid1.addToGrid(page) #adding some data to grid 1
        binder = cxt_functions.GridFunctions(self, grid1) #bind some functions to grid1
        binder.BindCrewGridMenu()            

        grid_panel_2 = wx.Panel(grid_splitter, style=wx.BORDER_THEME)
        grid2 = grid_maker.CreateGrid(grid_panel_2) #create the grid 1
        grid2.addToGrid(page) #adding some data to grid 1


        grid_splitter.SplitVertically(grid_panel_1, grid_panel_2, 100)

        grid_sizer = wx.BoxSizer(wx.VERTICAL)
        grid_sizer.Add(grid1, 1, wx.EXPAND | wx.ALL, 7)
        grid_sizer.Add(grid2, 0, wx.EXPAND | wx.ALL, 7)

        grid_panel.SetSizer(grid_sizer)

        chart_panel = wx.Panel(self.splitter_window, style=wx.BORDER_THEME)
        line_chart = bar_line.CanvasPanel(chart_panel, title_name)
        line_chart.draw()


        self.splitter_window.SplitHorizontally(grid_panel, chart_panel, 500)

        p_sizer = wx.BoxSizer(wx.VERTICAL)
        p_sizer.Add(self, 1, wx.EXPAND | wx.ALL, 7)    
        self.parent.SetSizer(p_sizer)


        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.parent, 1, wx.EXPAND)
        self.SetSizer(sizer)

上面有什么问题?

【问题讨论】:

    标签: python split wxpython wxnotebook


    【解决方案1】:

    我不确定你的代码发生了什么,因为它不是完全可运行的,所以我整理了我自己的版本:

    import wx
    import wx.grid as gridlib
    
    ########################################################################
    class RegularPanel(wx.Panel):
        """"""
    
        #----------------------------------------------------------------------
        def __init__(self, parent):
            """Constructor"""
            wx.Panel.__init__(self, parent)
            self.SetBackgroundColour("pink")
    
    
    ########################################################################
    class GridPanel(wx.Panel):
        """"""
    
        #----------------------------------------------------------------------
        def __init__(self, parent):
            """Constructor"""
            wx.Panel.__init__(self, parent)
            self.grid = gridlib.Grid(self, style=wx.BORDER_SUNKEN)
            self.grid.CreateGrid(25,8)
    
            sizer = wx.BoxSizer(wx.VERTICAL)
            sizer.Add(self.grid, 1, wx.EXPAND)
            self.SetSizer(sizer)
    
    
    ########################################################################
    class MainPanel(wx.Panel):
        """"""
    
        #----------------------------------------------------------------------
        def __init__(self, parent):
            """Constructor"""
            wx.Panel.__init__(self, parent)
    
            notebook = wx.Notebook(self)
    
            page = wx.SplitterWindow(notebook)
            notebook.AddPage(page, "Splitter")
            hSplitter = wx.SplitterWindow(page)
    
            panelOne = GridPanel(hSplitter)
            panelTwo = GridPanel(hSplitter)
            hSplitter.SplitVertically(panelOne, panelTwo)
            hSplitter.SetSashGravity(0.5)
    
            panelThree = RegularPanel(page)
            page.SplitHorizontally(hSplitter, panelThree)
            page.SetSashGravity(0.5)
    
            sizer = wx.BoxSizer(wx.VERTICAL)
            sizer.Add(notebook, 1, wx.EXPAND)
            self.SetSizer(sizer)
    
    ########################################################################
    class MainFrame(wx.Frame):
        """"""
    
        #----------------------------------------------------------------------
        def __init__(self):
            """Constructor"""
            wx.Frame.__init__(self, None, title="Nested Splitters",
                              size=(800,600))
            panel = MainPanel(self)
            self.Show()
    
    #----------------------------------------------------------------------
    if __name__ == "__main__":
        app = wx.App(False)
        frame = MainFrame()
        app.MainLoop()
    

    这是基于我的nested SplitterWindow tutorial 之一。我希望这可以帮助您弄清楚您自己的代码中发生了什么。

    【讨论】:

    • 谢谢,但我想把它放在一个笔记本上,它在一个框架上。如何调整?
    • 那么您要做的就是添加一个笔记本并将其设置为第一个拆分器的父级。我稍微调整了代码。
    • 好的,我搞定了。迈克,请告诉我如何同步滚动顶部面板上的 2 个网格,我已经尝试了所有方法,但无法正常工作。我会很感激的。最好的问候
    • 我不知道有什么简单的方法可以做到这一点。我发现最接近的现成是这个问题的答案:stackoverflow.com/questions/15870426/…
    • 你会为这 2 个网格使用“垂直分割的窗口”还是“2 个单独的面板”?哪个更方便?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多