2016-06-23 4 views
2

예상대로되지 동작을 수행하지만,이 panelBoxSizer에 배치 할 수없는 것 같다. 시도 했음wxWidgets에 : 팔렛에서 BoxSizer 내부 패널 내가 <code>OpenCV</code>에서 이미지를 그릴 <code>Panel</code>를 사용

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

정말 질문을 더 잘 표현해야합니다. 당신은 패널에 대해서 이야기하고 있는데,'panel' 변수를 가지면서'OpenCVCanvas' 선언을합니다. – catalin

+0

복서에 패널을 추가하는 동안, C++에서 sizer에 맞는 매개 변수를 제공하려고합니다. wxEXPAND처럼 표현할 것입니다. – StraightCirle

+0

@ catalin 'OpenCVCanvas'를'MyPanel'과 같은 이름으로 바꾸는 것이 더 낫습니다. –

답변

2

이 가능성이 문제의 원인 :

vbox.Add (OpenCVCanvas (자기), 국경 = 10)

당신 panel의 자식 인 버튼을 만들고 panel 크기 조절기로 설정된 크기 조절기에 추가하지만 OpenCVCanvasself을 부모로 사용하는 가정은 panel입니다. 즉, OpenCVCanvas은 형제가 아니며 자식이 아닌 panel입니다. 크기 조절기는 크기 조정기가 할당 된 창의 하위가 아닌 항목의 크기와 레이아웃을 관리 할 수 ​​없습니다.

+0

당신의 충고에 따라'OpenCVCanvas'의 부모를'self.panel'으로 바꿨지 만 지금도 여전히 작동 중입니다 ... –