2

私は wxPython とサイザーを調べようとしており、次の例をまとめました。

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 ウィンドウ

誰かが説明できますか、なぜ左上隅に灰色の小さな四角が表示されるのですか?また、コードを実装する正しい方法は何ですか? (ボタンは意図的に色付けされているため、明らかです..)これがプラットフォーム固有の場合に備えて、Ubuntu Lucidを使用しています。

編集:その正方形は明らかにパネル自体ですが、意図したように、サイズが変更されてボタンの「親」にならない理由がわかりませんか?

4

1 に答える 1

6

ああ、それほど悪くはありませんでした。しかし、私にはそれほど明白ではありませんでした:)だから、ここに私のような他の初心者向けのリファレンスがあります:上記のコードでは、ボタンはパネルではなくフレームの子として定義されています。したがって、唯一の変更は次のとおりです。

    # 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))

そして、すべてがうまくいくようです:

ここに画像の説明を入力

ここでスペースを無駄にして申し訳ありませんが、うまくいけば、他の人に役立つかもしれません:)

乾杯!

于 2011-03-01T12:45:31.527 に答える