【问题标题】:Panel doesn't expand in wxPython面板在 wxPython 中不展开
【发布时间】:2014-02-16 22:59:22
【问题描述】:

我对以下代码有疑问,我不明白。

为什么panel1 没有展开?

谢谢。

import wx

class MyFrame(wx.Frame):
    def __init__(self, parent, mytitle, mysize):
        wx.Frame.__init__(self, parent, wx.ID_ANY, mytitle, size=mysize)
        panel1 = wx.Panel(self)
        panel2 = wx.Panel(self)
        panel3 = wx.Panel(self)

        panel1.SetBackgroundColour("green")
        panel2.SetBackgroundColour("yellow")
        panel3.SetBackgroundColour("red")

        sizer_h = wx.BoxSizer(wx.HORIZONTAL)
        sizer_v = wx.BoxSizer(wx.VERTICAL)

        st1 = wx.StaticText(panel1, -1, "TEST")
        sizer_h.Add(st1, 1, wx.EXPAND)
        sizer_v.Add(sizer_h, proportion=1, flag=wx.EXPAND)
        sizer_v.Add(panel2, proportion=2, flag=wx.EXPAND)
        sizer_v.Add(panel3, proportion=1, flag=wx.EXPAND)
        # only set the main sizer if you have more than one
        self.SetSizer(sizer_v)

app = wx.App()
mytitle = "wx.Frame & wx.Panels"
width = 300
height = 320
MyFrame(None, mytitle, (width, height)).Show()
app.MainLoop()

【问题讨论】:

    标签: wxpython boxsizer


    【解决方案1】:

    需要修改的行是:

    sizer_h.Add(st1, 1, wx.EXPAND)

    应该是:

    sizer_h.Add(panel1, 1, wx.EXPAND)

    因为您需要调整 panel1 的大小而不仅仅是字符串。

    【讨论】:

      【解决方案2】:

      您想将面板添加到 sizer_h,而不是 st1。

      import wx
      
      class MyFrame(wx.Frame):
          def __init__(self, parent, mytitle, mysize):
              wx.Frame.__init__(self, parent, wx.ID_ANY, mytitle, size=mysize)
              panel1 = wx.Panel(self)
              panel2 = wx.Panel(self)
              panel3 = wx.Panel(self)
      
              panel1.SetBackgroundColour("green")
              panel2.SetBackgroundColour("yellow")
              panel3.SetBackgroundColour("red")
      
              sizer_h = wx.BoxSizer(wx.HORIZONTAL)
              sizer_v = wx.BoxSizer(wx.VERTICAL)
      
              st1 = wx.StaticText(panel1, -1, "TEST")
              sizer_h.Add(panel1, wx.EXPAND)
              sizer_v.Add(sizer_h, proportion=1, flag=wx.EXPAND)
              sizer_v.Add(panel2, proportion=2, flag=wx.EXPAND)
              sizer_v.Add(panel3, proportion=1, flag=wx.EXPAND)
              # only set the main sizer if you have more than one
              self.SetSizer(sizer_v)
      
      app = wx.App()
      mytitle = "wx.Frame & wx.Panels"
      width = 300
      height = 320
      MyFrame(None, mytitle, (width, height)).Show()
      app.MainLoop()
      

      您现在可以看到面板扩展到其大小调整器的整个宽度和静态文本的高度,其余部分被空白区域占据。不太清楚如何垂直填充面板,以免灰色泄漏,抱歉

      【讨论】:

        猜你喜欢
        • 2010-11-06
        • 2011-03-07
        • 1970-01-01
        • 2017-03-21
        • 1970-01-01
        • 2011-02-22
        • 2011-10-31
        • 2012-12-06
        • 1970-01-01
        相关资源
        最近更新 更多