wxWidgets:BoxSizer中的Panel没有按预期行为

时间:2016-06-23 05:40:48

标签: python opencv wxpython wxwidgets

我使用PanelOpenCV中提取图片,但似乎panel无法放入BoxSizer。我试着做

vbox = wx.BoxSizer(wx.VERTICAL)
panel.SetSizer(vbox)
vbox.Add(wx.Button(panel, label='aaa', size=(70, 30)))
vbox.Add(wx.Button(panel, label='aaa', size=(70, 30)))
vbox.Add(wx.Button(panel, label='aaa', size=(70, 30)))
vbox.Add(OpenCVCanvas(self), border=10)

按钮布局正确,但面板始终位于左上角。我做错了什么?

小组代码:

class OpenCVCanvas(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        self.Bind(wx.EVT_PAINT, self.onPaint)
        self.bmp = None

    def updateImage(self, frame):
        if self.bmp is None:
            height, width = frame.shape[:2]
            self.SetSize((width, height))
            self.bmp = wx.BitmapFromBuffer(width, height, frame)
        self.bmp.CopyFromBuffer(frame)
        self.Refresh()

    def onPaint(self, evt):
        if self.bmp is not None:
            dc = wx.BufferedPaintDC(self)
            dc.DrawBitmap(self.bmp, 0, 0)

1 个答案:

答案 0 :(得分:2)

这可能是问题的根源:

  

vbox.Add(OpenCVCanvas(self),border = 10)

您正在创建panel子项的按钮,并将它们添加到设置为panel sizer的sizer,但OpenCVCanvas正在使用self我假设它的父亲是panel的父亲,这意味着OpenCVCanvaspanel的兄弟,而不是它的孩子。 sizer无法管理不是sizer所分配窗口的子项的项目的大小和布局。