Панель не расширяется в wxPython - PullRequest
2 голосов
/ 30 июня 2010

У меня проблема со следующим кодом, который я не понимаю.

Почему 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()

Ответы [ 2 ]

2 голосов
/ 02 июля 2010

Строка, которую нужно изменить:

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

Должно быть:

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

Потому что вам нужен размер панели1, а не только строки.

1 голос
/ 01 июля 2010

Вы хотите добавить панель в 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()

Теперь вы можете видеть, что панель расширяется до полной ширины своего размера и высоты статического текста, а остальная часть занята пустым пространством. Не слишком уверен, как правильно заполнить панель по вертикали, чтобы серый не просочился, извините

...