两台BoxSizer相互干扰

问题描述 投票:0回答:1

我有两个BoxSizers,第一个是

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

和另一个垂直的BoxSizers,在按钮网格的左边,两个BoxSizers都会发生干扰。

vbox1 = wx.FlexGridSizer (rows = 1, cols = 3, hgap = 5, vgap = 5)
buttonsBox1 = wx.BoxSizer (wx.VERTICAL)
buttonsBox1.Add (self.buttonoborved)
vbox1.Add (buttonsBox1)
vbox1.Add (self.grid2)
vbox1.Add (midPan1, wx.ID_ANY, wx.EXPAND | wx.ALL, 20)
panel2.SetSizer (vbox1)

出现一个错误--在sizer中已经添加了一个窗口,先把它分离出来!怎么能同时调用它们。

编辑:那是两个BoxSizer,一个在另一个,但怎么能把按钮放在里面。

import wx
import wx.grid
from wx.lib.scrolledpanel import ScrolledPanel

class TestPanel(ScrolledPanel):
    def __init__(self, parent):
    ScrolledPanel.__init__(self, parent, wx.ID_ANY, size=(640, 480))
    self.sizer = wx.BoxSizer(wx.VERTICAL)
    self.sizer.Add(self._create_table(), 1, wx.EXPAND | wx.ALL, 5)
    self.SetSizer(self.sizer)
    self.SetupScrolling()
    self.SetAutoLayout(1)

def _create_table(self):
    _table = wx.grid.Grid(self, -1)
    _table.CreateGrid(0, 2)
    for i in range(1723):  # Work normally If I use 1722 rows
        _table.AppendRows()
        _table.SetCellValue(i, 0, str(i))
    return _table

class TestFrame(wx.Frame):
    def __init__(self):
    wx.Frame.__init__(self, None, wx.ID_ANY,
            title="Scroll table", size=(640, 480))
    self.fSizer = wx.BoxSizer(wx.VERTICAL)
    self.fSizer.Add(TestPanel(self), 1, wx.EXPAND)
    self.SetSizer(self.fSizer)
    self.Show()

if __name__ == "__main__":
    app = wx.App(False)
    frame = TestFrame()
    app.MainLoop()
python python-3.x wxpython
1个回答
0
投票

这取决于你想把按钮放在哪里,但我们假设它们应该在底部。

import wx
import wx.grid
from wx.lib.scrolledpanel import ScrolledPanel

class TestPanel(ScrolledPanel):
    def __init__(self, parent):
        ScrolledPanel.__init__(self, parent, wx.ID_ANY, size=(640, 480))
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(self._create_table(), 1, wx.EXPAND | wx.ALL, 5)

        self.b1 = wx.Button(self, -1, "Button 1")
        self.b2 = wx.Button(self, -1, "Button 2")
        self.b3 = wx.Button(self, -1, "Button 3")

        button_sizer = wx.BoxSizer(wx.HORIZONTAL)
        button_sizer.Add(self.b1)
        button_sizer.Add(self.b2)
        button_sizer.Add(self.b3)
        self.sizer.Add(button_sizer)

        self.SetSizer(self.sizer)
        self.SetupScrolling()
        self.SetAutoLayout(1)

    def _create_table(self):
        _table = wx.grid.Grid(self, -1)
        _table.CreateGrid(0, 2)
        for i in range(1723):  # Work normally If I use 1722 rows
            _table.AppendRows()
            _table.SetCellValue(i, 0, str(i))
        return _table

class TestFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY,
                title="Scroll table", size=(640, 480))
        self.fSizer = wx.BoxSizer(wx.VERTICAL)
        self.fSizer.Add(TestPanel(self), 1, wx.EXPAND)
        self.SetSizer(self.fSizer)
        self.Show()

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

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.