【问题标题】:wxPython - problem with nested sizers, a panel and SetSizer / FitwxPython - 嵌套尺寸器、面板和 SetSizer / Fit 的问题
【发布时间】:2011-07-09 14:19:38
【问题描述】:

我目前正在尝试掌握 wxPython,但偶然发现了嵌套尺寸器,将它们放在面板上并适合它们。

我想在 BoxSizer 中的 StaticBoxSizer 中有一个 GridBagSizer。整体应该在一个面板上。

我的代码:

import wx

class App(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, "Frame", size=(550, 300))
        panel = wx.Panel(self, -1)
        mainSizer = self.makeOuterSizer()

        # fit layout
        panel.SetSizer(mainSizer)
        mainSizer.Fit(panel)

##         mainSizer.Fit(self)
##         self.SetSizer(mainSizer)

    # ----

    def makeOuterSizer(self):

        # define sizer
        innerSizer = self.makeGrid()

        # make 
        outerSizer = wx.BoxSizer(wx.VERTICAL)
        outerSizer.Add(innerSizer, 0, wx.EXPAND|wx.CENTER|wx.ALL, 10)

        return outerSizer
    # ----

    def makeGrid(self):

        sizer = wx.StaticBoxSizer(wx.StaticBox(self, -1, ""), wx.VERTICAL)

        # make fields
        itemMonomer1_label = wx.StaticText(self, -1, "Text 1")
        self.itemMonomer1_value = wx.TextCtrl(self, -1, "", size=(100, -1))
        itemMonomer2_label = wx.StaticText(self, -1, "Text 2")
        self.itemMonomer2_value = wx.TextCtrl(self, -1, "", size=(100, -1))
        itemMonomer3_label = wx.StaticText(self, -1, "Text 3")
        self.itemMonomer3_value = wx.TextCtrl(self, -1, "", size=(100, -1))

        # pack elements

        grid = wx.GridBagSizer(2, 3)

        grid.Add(itemMonomer1_label, (0,0), flag=wx.ALIGN_CENTER|wx.ALIGN_CENTER_VERTICAL)
        grid.Add(self.itemMonomer1_value, (1,0), flag=wx.EXPAND)
        grid.Add(itemMonomer2_label, (0,1), flag=wx.ALIGN_CENTER|wx.ALIGN_CENTER_VERTICAL)
        grid.Add(self.itemMonomer2_value, (1,1), flag=wx.EXPAND)
        grid.Add(itemMonomer3_label, (0,2), flag=wx.ALIGN_CENTER|wx.ALIGN_CENTER_VERTICAL)
        grid.Add(self.itemMonomer3_value, (1,2), flag=wx.EXPAND)

        sizer.Add(grid, 0, wx.EXPAND|wx.ALIGN_CENTER|wx.ALL, 5)

        return sizer
    # ----

if __name__ == '__main__':
    app = wx.App()
    App().Show(True)
    app.MainLoop()

所以,上面的代码实际上并不能正常工作。但是,当我引用第 10 行和第 11 行并取消引用第 13 和 14 行时,至少正确显示了 GridBagSizer。所以我怀疑我的 SetSizer 和 Fit 行中的某些东西一定是错误的...但是面板仍然卡在右上角并且无法正常工作...

非常感谢任何提示!

谢谢你,伐木工

【问题讨论】:

    标签: wxpython nested panel


    【解决方案1】:

    您要在面板上显示的小部件应该是面板的子级,而不是框架。尝试以下更改:

    class App(wx.Frame):
        def __init__(self):
            wx.Frame.__init__(self, None, -1, "Frame", size=(550, 300))
            self.panel = wx.Panel(self, -1)
            mainSizer = self.makeOuterSizer()
    
            # fit layout
            self.panel.SetSizer(mainSizer)
            mainSizer.Fit(self.panel)
    
    # ...
    
    def makeGrid(self):
    
        sizer = wx.StaticBoxSizer(wx.StaticBox(self.panel, -1, ""), wx.VERTICAL)
    
        # make fields
        itemMonomer1_label = wx.StaticText(self.panel, -1, "Text 1")
        self.itemMonomer1_value = wx.TextCtrl(self.panel, -1, "", size=(100, -1))
        itemMonomer2_label = wx.StaticText(self.panel, -1, "Text 2")
        self.itemMonomer2_value = wx.TextCtrl(self.panel, -1, "", size=(100, -1))
        itemMonomer3_label = wx.StaticText(self.panel, -1, "Text 3")
        self.itemMonomer3_value = wx.TextCtrl(self.panel, -1, "", size=(100, -1))
    

    如果您希望 GridBagSizer 与 StaticBox 一起扩展,您仍然必须为 GridBagSizer 提供一个或多个可增长的列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-05
      • 2012-12-10
      • 1970-01-01
      • 1970-01-01
      • 2014-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多