wxpython中三个面板网格布局中的嵌套大小调整器

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

我正在构建一个包含三个面板和2个网格(每个面板一个网格)的GUI。我正在努力使用BoxSizer将对象放入其各自的面板中。看来垂直装箱机仅考虑框架的上部和下部,而不考虑上部被分成两个面板。因此,尝试在上部垂直组织小部件时遇到问题。尝试将小部件添加到panelTwo时,垂直放置从panelOne拾取,反之亦然。如果可能的话,我想为每个面板分配一个垂直装箱机。请原谅草率的代码。我只有几天才接触Python,所以请放轻松!我愿意接受建议!这是我遇到问题的部分:

    p1Sizer = wx.BoxSizer(wx.VERTICAL)
    p2Sizer = wx.BoxSizer(wx.VERTICAL)
    p3Sizer = wx.BoxSizer(wx.VERTICAL)`


    p3Sizer.Add(bottom_grid, 1, wx.EXPAND)#,pos=(200,200)

    p2Sizer.Add(p1Sizer)
    hbox1.Add(st1, flag=wx.ALL, border=5)
    hbox1.Add(tc1, flag=wx.ALL, border=10)
    hbox2.Add(st2, flag=wx.ALL, border=5)
    hbox2.Add(tc2, flag=wx.ALL, border=10)
    hbox3.Add(st3, flag=wx.ALL, border=5)
    hbox3.Add(tc3, flag=wx.ALL, border=5)
    p1Sizer.Add(hbox1,flag=wx.ALIGN_RIGHT)
    p1Sizer.Add(hbox2, flag=wx.ALIGN_RIGHT)
    p1Sizer.Add(hbox3, flag=wx.ALIGN_LEFT)

如果我包括这一行,则panelTwo的格式正确。参见附件。enter image description here

p2Sizer.Add(0,-120)

但是我觉得这不是正确的方法。我还试图找到一种方法来创建具有不同行数的两个单独的网格。即

self.CreateGrid(100, 27)

和...

'self.CreateGrid(5,27)'

import wx import wx.grid as gridlib import pandas as pd import numpy as np

class MyGrid(gridlib.Grid): def __init__(self, parent):

    """Constructor"""
    gridlib.Grid.__init__(self, parent)

    self.CreateGrid(100, 27)         

class MasterPanel(wx.Panel):

def __init__(self, parent, color):
    """Constructor"""
    wx.Panel.__init__(self, parent)
    self.SetBackgroundColour(color)`

class MainPanel(wx.Panel):

def __init__(self, parent):`

    """Constructor"""
    wx.Panel.__init__(self, parent)`

    topSplitter = wx.SplitterWindow(self)
    vSplitter = wx.SplitterWindow(topSplitter)
    font = wx.SystemSettings.GetFont(wx.SYS_SYSTEM_FONT)

    font.SetPointSize(50)

    panelOne = MasterPanel(vSplitter, "light grey")
    panelTwo = MasterPanel(vSplitter, "white")
    panelThree = MasterPanel(topSplitter,"white")

    vSplitter.SplitVertically(panelOne, panelTwo)
    vSplitter.SetMinimumPaneSize(300) # 300

    vSplitter.SetSashGravity(.5)


    topSplitter.SplitHorizontally(vSplitter, panelThree)
    topSplitter.SetMinimumPaneSize(200) #200
    topSplitter.SetSashGravity(1)
    #topSplitter.SetSashGravity(1)

# Assign grid to BOTTOM PANEL bottom_grid = MyGrid(panelThree) top_grid= MyGrid(panelTwo)

    st1 = wx.StaticText(panelOne, -1,"Name")
    st1.SetFont(font)
    st2 = wx.StaticText(panelOne, -1,"Date:")    
    st2.SetFont(font)
    st3 = wx.StaticText(panelOne, -1,"Input #:")
    st3.SetFont(font)
    st4 = wx.StaticText(panelTwo, -1,"From Source:")
    st4.SetFont(font)
    st5 = wx.StaticText(panelTwo, -1,"Lookup:")
    st5.SetFont(font)
    st6 = wx.StaticText(panelTwo, -1,"Lookup Value:")
    st6.SetFont(font)

    tc1 = wx.TextCtrl(panelOne,size=(150,25), value="-enter name-")
    tc2 = wx.TextCtrl(panelOne,size=(150,25), value="-enter date-")
    tc3 = wx.TextCtrl(panelOne, value="-input item #'")
    tc4 = wx.TextCtrl(panelTwo, value="-Search-")

    options= ['A','B','C']

    combo1 = wx.ComboBox(panelTwo,size=(150,25),value="-Choose Source-",choices=options, 
    style=wx.LB_SINGLE)
    combo2 = wx.ComboBox(panelTwo,size=(150,25),value="-Choose Lookup Type-",choices=options, 
    style=wx.LB_SINGLE)

    hbox1 = wx.BoxSizer(wx.HORIZONTAL)
    hbox2 = wx.BoxSizer(wx.HORIZONTAL)
    hbox3 = wx.BoxSizer(wx.HORIZONTAL)
    hbox4 = wx.BoxSizer(wx.HORIZONTAL)
    hbox5 = wx.BoxSizer(wx.HORIZONTAL)
    hbox6 = wx.BoxSizer(wx.HORIZONTAL)

    p1Sizer = wx.BoxSizer(wx.VERTICAL)
    p2Sizer = wx.BoxSizer(wx.VERTICAL)
    p3Sizer = wx.BoxSizer(wx.VERTICAL)


    p3Sizer.Add(bottom_grid, 1, wx.EXPAND)#,pos=(200,200)

    p2Sizer.Add(p1Sizer)
    hbox1.Add(st1, flag=wx.ALL, border=5)
    hbox1.Add(tc1, flag=wx.ALL, border=10)
    hbox2.Add(st2, flag=wx.ALL, border=5)
    hbox2.Add(tc2, flag=wx.ALL, border=10)
    hbox3.Add(st3, flag=wx.ALL, border=5)
    hbox3.Add(tc3, flag=wx.ALL, border=5)
    p1Sizer.Add(hbox1,flag=wx.ALIGN_RIGHT)
    p1Sizer.Add(hbox2, flag=wx.ALIGN_RIGHT)
    p1Sizer.Add(hbox3, flag=wx.ALIGN_LEFT)


    #p2Sizer.Add(0,-120)

    hbox4.Add(st4, flag=wx.ALL, border=5)
    hbox4.Add(combo1, flag=wx.ALL, border=5)
    hbox5.Add(st5, flag=wx.ALL, border=5)
    hbox5.Add(combo2, flag=wx.ALL, border=5)
    hbox6.Add(st6, flag=wx.ALL, border=5)
    hbox6.Add(tc4, flag=wx.ALL, border=5)
    p2Sizer.Add(hbox4)
    p2Sizer.Add(hbox5)
    p2Sizer.Add(hbox6)




    #p1Sizer.Add(p1, 2, wx.EXPAND)#,pos=(200,200)
    p2Sizer.Add(top_grid, 1, wx.EXPAND)#,pos=(200,200)


    panelThree.SetSizer(p3Sizer)
    panelTwo.SetSizer(p2Sizer)
    #panelOne.SetSizer(p1Sizer)

    sizer = wx.BoxSizer(wx.VERTICAL)

    #sizer.Add(top_grid)
    sizer.Add(topSplitter, -1, wx.EXPAND)

    #panelTwo.SetSizer(sizer)
    self.SetSizer(sizer)

class MainFrame(wx.Frame):

def __init__(self):
    """Constructor"""
    wx.Frame.__init__(self, None, title="Hell Yeah",
                      size=(1600,700))
    panel = MainPanel(self)
    self.Show()   `

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

python python-3.x wxpython wxgrid boxsizer
1个回答
0
投票

我已经“解释”了您的图像,转储了分割后的窗口,这些窗口仅增加了复杂性。我也放弃了字体大小。请随意使用下面的代码作为起点,并在必要时重新设置它们。

import wx
import wx.grid as gridlib

class MyGrid(gridlib.Grid):
    def __init__(self, parent):
        """Constructor"""
        gridlib.Grid.__init__(self, parent)

        self.CreateGrid(100, 27)

class MasterPanel(wx.Panel):
    def __init__(self, parent, color):
        """Constructor"""
        wx.Panel.__init__(self, parent)
        self.SetBackgroundColour(color)

class MainPanel(wx.Panel):
    def __init__(self, parent):
        """Constructor"""
        wx.Panel.__init__(self, parent)

        font = wx.SystemSettings.GetFont(wx.SYS_SYSTEM_FONT)

        panelOne = MasterPanel(self, "light grey")
        panelTwo = MasterPanel(self, "white")
        panelThree = MasterPanel(self,"white")

    # Assign grid to BOTTOM PANEL
        bottom_grid = MyGrid(panelThree)

        st1 = wx.StaticText(panelOne, -1,"Name")
        st1.SetFont(font)
        st2 = wx.StaticText(panelOne, -1,"Date:")
        st2.SetFont(font)
        st3 = wx.StaticText(panelOne, -1,"Input #:")
        st3.SetFont(font)
        st4 = wx.StaticText(panelTwo, -1,"From Source:")
        st4.SetFont(font)
        st5 = wx.StaticText(panelTwo, -1,"Lookup:")
        st5.SetFont(font)
        st6 = wx.StaticText(panelTwo, -1,"Lookup Value:")
        st6.SetFont(font)

        tc1 = wx.TextCtrl(panelOne, value="-enter name-")
        tc2 = wx.TextCtrl(panelOne, value="-enter date-")
        tc3 = wx.TextCtrl(panelOne, value="-input item #'")
        tc4 = wx.TextCtrl(panelTwo, value="-Search-")

        options= ['Option 1','Option 2','Option 3']

        combo1 = wx.ComboBox(panelTwo,value="-Choose Source-",choices=options,
        style=wx.LB_SINGLE)
        combo2 = wx.ComboBox(panelTwo,value="-Choose Lookup Type-",choices=options,
        style=wx.LB_SINGLE)

        hbox1 = wx.BoxSizer(wx.HORIZONTAL)
        hbox2 = wx.BoxSizer(wx.HORIZONTAL)
        hbox3 = wx.BoxSizer(wx.HORIZONTAL)
        hbox4 = wx.BoxSizer(wx.HORIZONTAL)
        hbox5 = wx.BoxSizer(wx.HORIZONTAL)
        hbox6 = wx.BoxSizer(wx.HORIZONTAL)

        p1Sizer = wx.BoxSizer(wx.VERTICAL)
        p2Sizer = wx.BoxSizer(wx.VERTICAL)
        p3Sizer = wx.BoxSizer(wx.VERTICAL)
        p3Sizer.Add(bottom_grid, 1, wx.EXPAND)

        hbox1.Add(st1, flag=wx.ALL, border=5)
        hbox1.Add(tc1, flag=wx.ALL, border=5)
        hbox2.Add(st2, flag=wx.ALL, border=5)
        hbox2.Add(tc2, flag=wx.ALL, border=5)
        hbox3.Add(st3, flag=wx.ALL, border=5)
        hbox3.Add(tc3, flag=wx.ALL, border=5)
        p1Sizer.Add(hbox1, flag=wx.ALIGN_RIGHT)
        p1Sizer.Add(hbox2, flag=wx.ALIGN_RIGHT)
        p1Sizer.Add(hbox3, flag=wx.ALIGN_RIGHT)

        hbox4.Add(st4, flag=wx.ALL, border=5)
        hbox4.Add(combo1, flag=wx.ALL, border=5)
        hbox5.Add(st5, flag=wx.ALL, border=5)
        hbox5.Add(combo2, flag=wx.ALL, border=5)
        hbox6.Add(st6, flag=wx.ALL, border=5)
        hbox6.Add(tc4, flag=wx.ALL, border=5)
        p2Sizer.Add(hbox4, flag=wx.ALIGN_RIGHT)
        p2Sizer.Add(hbox5, flag=wx.ALIGN_RIGHT)
        p2Sizer.Add(hbox6, flag=wx.ALIGN_RIGHT)

        panelThree.SetSizer(p3Sizer)
        panelTwo.SetSizer(p2Sizer)
        panelOne.SetSizer(p1Sizer)

        mainsizer_top = wx.BoxSizer(wx.HORIZONTAL)
        mainsizer_bottom = wx.BoxSizer(wx.VERTICAL)
        mainsizer = wx.BoxSizer(wx.VERTICAL)

        mainsizer_top.Add(panelOne, 0, wx.EXPAND)
        mainsizer_top.Add(panelTwo, 0, wx.EXPAND)
        mainsizer_bottom.Add(panelThree, 1, wx.EXPAND)
        mainsizer.Add(mainsizer_top, 0, wx.EXPAND)
        mainsizer.Add(mainsizer_bottom, 1, wx.EXPAND)

        self.SetSizer(mainsizer)

class MainFrame(wx.Frame):
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, title="Hell Yeah",
                          size=(1600,700))
        panel = MainPanel(self)
        self.Show()

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

enter image description here

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