2011-12-20 5 views
3

다음 코드는 텍스트를 윈도우의 중앙에 표시해야합니다. 즉, 내부 패널의 중앙에 있습니다. 그러나 나는 왜 그렇게 생각하지 않는지 궁금합니다. 코드를 실행하면 150px x 150px 크기의 프레임 중간에 흰색 패널이 표시됩니다. 이 영역의 크기를 전혀 변경하지 않으려 고하지만 일부 텍스트 (코드 조각의 중간에 txt 변수를 주석 처리하지 않음)를 추가하면 패널이 항상 텍스트에 맞게 축소됩니다. 패널과 일치하도록 StaticText의 크기를 지정하는 것조차도 텍스트가 가운데 정렬되지 않기 때문에 해결책이 아닙니다.wxpython : 사이 저 내의 패널 내에 텍스트 가운데 맞추기

import wx 

class MyFrame(wx.Frame): 
    def __init__(self, parent, id, title): 
     wx.Frame.__init__(self, parent, id, title) 




     self.rootPanel = wx.Panel(self) 

     innerPanel = wx.Panel(self.rootPanel,-1, size=(150,150), style=wx.ALIGN_CENTER) 
     innerPanel.SetBackgroundColour('WHITE') 
     hbox = wx.BoxSizer(wx.HORIZONTAL) 
     vbox = wx.BoxSizer(wx.VERTICAL) 

     # I want this line visible in the CENTRE of the inner panel 
     #txt = wx.StaticText(innerPanel, id=-1, label="TEXT HERE",style=wx.ALIGN_CENTER, name="") 

     hbox.Add(innerPanel, 0, wx.ALL|wx.ALIGN_CENTER) 
     vbox.Add(hbox, 1, wx.ALL|wx.ALIGN_CENTER, 5) 

     self.rootPanel.SetSizer(vbox) 
     vbox.Fit(self) 

class MyApp(wx.App): 
    def OnInit(self): 
     frame = MyFrame(None, -1, 'wxBoxSizer.py') 
     frame.Show(True) 
     frame.Center() 
     return True 

app = MyApp(0) 
app.MainLoop() 

답변

6

작동하려면 몇 개의 스페이서를 추가하기 만하면됩니다.

import wx 

class MyFrame(wx.Frame): 
    def __init__(self, parent, id, title): 
     wx.Frame.__init__(self, parent, id, title) 

     self.rootPanel = wx.Panel(self) 

     innerPanel = wx.Panel(self.rootPanel,-1, size=(150,150), style=wx.ALIGN_CENTER) 
     innerPanel.SetBackgroundColour('WHITE') 
     hbox = wx.BoxSizer(wx.HORIZONTAL) 
     vbox = wx.BoxSizer(wx.VERTICAL) 
     innerBox = wx.BoxSizer(wx.VERTICAL) 

     # I want this line visible in the CENTRE of the inner panel 
     txt = wx.StaticText(innerPanel, id=-1, label="TEXT HERE",style=wx.ALIGN_CENTER, name="") 
     innerBox.AddSpacer((150,75)) 
     innerBox.Add(txt, 0, wx.CENTER) 
     innerBox.AddSpacer((150,75)) 
     innerPanel.SetSizer(innerBox) 

     hbox.Add(innerPanel, 0, wx.ALL|wx.ALIGN_CENTER) 
     vbox.Add(hbox, 1, wx.ALL|wx.ALIGN_CENTER, 5) 

     self.rootPanel.SetSizer(vbox) 
     vbox.Fit(self) 

class MyApp(wx.App): 
    def OnInit(self): 
     frame = MyFrame(None, -1, 'wxBoxSizer.py') 
     frame.Show(True) 
     frame.Center() 
     return True 

app = MyApp(0) 
app.MainLoop() 
+0

감사합니다. Mike. 나이를 먹으려 고 노력했는데 스페이서 접근 방식이 잘 작동합니다. 그러나 유비 쿼터스처럼 뭔가 할 일선이 있어야한다는 것을 느낄 수는 없습니다. –

+0

음, 스페이서를 만든 다음 sizer의 AddMany() 메서드를 사용하여 세 가지를 모두 추가 할 수 있습니다. 내가 잊어 버린 래퍼가 있거나 SizedControls가 작동 할 수도 있습니다. 나는 후자를 실제로 사용하지 않았다. –

관련 문제