【问题标题】:wxpython: nested sizers, and little square in top left corner?wxpython:嵌套的sizer,左上角的小方块?
【发布时间】:2011-07-06 11:41:51
【问题描述】:

我正在尝试研究 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()

当我运行这个时,我得到一个像图像上的窗口:

有人可以解释一下,为什么我会在左上角看到那个灰色的小方块 - 实现代码的正确方法是什么? (按钮是故意着色的,所以很明显..)我在 Ubuntu Lucid 上,以防这是特定于平台的。

编辑:那个正方形显然是面板本身,但是我不知道为什么它不按预期调整大小并成为按钮的“父级”?

【问题讨论】:

    标签: wxpython sizer


    【解决方案1】:

    啊,好吧——还不错;但对我来说并不是那么明显:) 所以这里有一些像我这样的菜鸟的参考:在上面的代码中,按钮被定义为框架的子级 - 而不是面板的子级;所以唯一的变化是:

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

    然后一切似乎都很好:

    好吧,很抱歉在这里浪费了空间-但希望对其他人有用:)

    干杯!

    【讨论】:

      猜你喜欢
      • 2012-12-10
      • 1970-01-01
      • 2021-04-03
      • 2013-10-07
      • 1970-01-01
      • 1970-01-01
      • 2020-08-26
      • 1970-01-01
      • 2013-08-01
      相关资源
      最近更新 更多