2010-03-25 3 views
0

나는 wx/python에 익숙하지 않으므로 바보 같거나 잘못 설명하면 변명의 여지가있다.sizer.replace()는 "오래된"sizercontent를 "덮어 쓴다"

아래 스 니펫에 나와있는 것처럼 중첩 크기 조정 프로그램을 새 크기 조정 프로그램으로 바꿉니다. 약간의 수정을 한 후에 모든 것이 잘되는 것 같지만 부모 - 크기 결정자의 재 설계가 필요합니다. 이전 중첩 선별기의 내용이 남아 있고 내 sizer.Layout()

시스템 설정에도 불구하고 새로운 선별기 함량 이상 "그린"도착 :
- 파이썬 2.5.5.2 및 2.6.4
- wxPython을 2.8

# -*- coding: utf8 -*- 

import wx 

class Frame(wx.Frame): 
def __init__(self): 
    wx.Frame.__init__(self, None, wx.ID_ANY, title='test') 

class Test(wx.App): 
    def OnInit(self): 
     frame = Frame() 
     self.panel = wx.Panel(frame) 
     self.panel.SetBackgroundColour('red') 
     self.sizer = wx.BoxSizer(wx.VERTICAL) 
     button = wx.Button(self.panel, wx.ID_ANY, 'TEST') 

     self.hsizer = wx.BoxSizer(wx.HORIZONTAL) 
     self.hsizer.Add(wx.StaticText(self.panel, wx.ID_ANY, 'nacknack')) 

     self.sizer.Add(button) 
     self.Bind(wx.EVT_BUTTON, self.on_test_button, button) 
     self.text = wx.StaticText(self.panel, wx.ID_ANY, 'FOOO') 
     self.sizer.Add(self.text) 
     self.sizer.Add(self.hsizer) 
     self.panel.SetSizer(self.sizer) 
     frame.Show() 
     return True 

    def on_test_button(self, evt): 
     tmpsizer = wx.BoxSizer(wx.VERTICAL) 
     tmpsizer.Add(self.makesizer()) 
     tmpitem = tmpsizer.GetChildren()[0] 

     self.sizer.Replace(2, tmpitem) 
     self.sizer.Layout() 

    def makesizer(self): 
     testsizer = wx.BoxSizer(wx.HORIZONTAL) 
     testsizer.Add(wx.StaticText(self.panel, wx.ID_ANY, 'testsizer')) 
     return testsizer 

    if __name__ == '__main__': 
     app = Test() 
     app.MainLoop() 

답변

0

(- 그것을 다르게 다음의 서식을 고려하시기 바랍니다 - 그것은 쉽지 않았다 어쩌면 self.sizer.add 기능이나 뭔가를 그룹화) 코드를 통해보고 후 나는 버그 발견 생각 :

언제 요 크기 조정기에서 Replace으로 전화하면 교체 할 품목이 이 (가)으로 삭제되지 않고 더 이상에 의해 관리되지 않는 이됩니다.

virtualbool Replace (wxWindow *oldwin, wxWindow *newwin, bool recursive=false)     Detaches the given oldwin from the sizer and replaces it with the given newwin.

: 당신은 wxWidgets에 워드 프로세서에서 언급 한 바와 같이 낡은 윈도우합니다 (wx.StaticText)

을 숨기거나 파괴 할 필요가