wxpython: вложенные размеры и маленький квадрат в левом верхнем углу? - PullRequest
2 голосов
/ 01 марта 2011

Я пытаюсь изучить wxPython и sizers, и я собрал следующий пример:

import wx

class MyTestFrame(wx.Frame):
    def __init__(self, parent, title):
        super(MyTestFrame, self).__init__(parent, title=title, 
            size=(250, 150))

        # the master panel of the frame - "Add a panel so it looks correct on all platforms"
        self.panel = wx.Panel(self, wx.ID_ANY)
            # self.panel.SetBackgroundColour(wx.Colour(124, 224, 124)) # to confirm the square is the panel


        # want these buttons absolutely positioned
        btn_A = wx.Button(self, id=1, label='A', pos=(10, 10), size=(30, 30))
        btn_A.SetBackgroundColour(wx.Colour(224, 124, 124))
        btn_B = wx.Button(self, id=2, label='B', pos=(45, 10), size=(30, 30))
        btn_C = wx.Button(self, id=3, label='C', pos=(80, 10), size=(30, 30))

        # additional object

        mastersizer = wx.BoxSizer(wx.VERTICAL)
        btnsizer = wx.BoxSizer(wx.HORIZONTAL)

        btnsizer.Add(btn_A, 0)
        btnsizer.Add(btn_B, 0)
        btnsizer.Add(btn_C, 0)

        mastersizer.Add(btnsizer, 1, wx.EXPAND)
        self.panel.SetSizer(mastersizer)
        #~ mastersizer.Fit(self) # makes the window as large as the buttons

        self.Centre()
        self.Show()


if __name__ == '__main__':
    app = wx.App()
    MyTestFrame(None, 'Test')
    app.MainLoop()

Когда я запускаю это, я получаю окно, как на изображении:

wxPython window

Может кто-нибудь объяснить, почему я получаю этот серый маленький квадрат в верхнем левом углу - и какой будет правильный способ реализации кода?(Кнопка намеренно окрашена, поэтому это может быть очевидно ...) Я работаю на Ubuntu Lucid, на случай, если это зависит от платформы.

РЕДАКТИРОВАТЬ: Этот квадрат, по-видимому, сама панель, но тогда я не могу сказать, почему он не изменяет размеры и не становится «родительским» для кнопок, как предполагалось?

1 Ответ

5 голосов
/ 01 марта 2011

Ах, хорошо - не так уж и плохо;но для меня это было неочевидно :) Итак, вот некоторые ссылки для других нубов, таких как я: в приведенном выше коде кнопки определены как дочерние элементы фрейма, а не панели;поэтому единственное изменение заключается в следующем:

    # want these buttons absolutely positioned
    # must be children of panel - if panel is to encompass them! 
    btn_A = wx.Button(self.panel, id=1, label='A', pos=(10, 10), size=(30, 30))
    btn_A.SetBackgroundColour(wx.Colour(224, 124, 124))
    btn_B = wx.Button(self.panel, id=2, label='B', pos=(45, 10), size=(30, 30))
    btn_C = wx.Button(self.panel, id=3, label='C', pos=(80, 10), size=(30, 30))

И тогда все кажется в порядке:

enter image description here

Ну, извините, что потратил здесь впустую место - но, надеюсь, можетбыть полезным для других :)

Ура!

...