2014-02-11 12 views
0

다음은 내가 수행하려고 시도 할 수있는 가장 간단한 예입니다. 패널 안의 격자입니다.격자에 맞게 패널의 크기를 조절하는 방법

#!/usr/bin/env python 

import wx 
import wx.grid 

app = wx.App(False) 

class InfoPane(wx.grid.Grid): 
    def __init__(self, parent): 
     wx.grid.Grid.__init__(self, parent) 

     # Set up the presentation 
     self.SetRowLabelSize(0) 
     self.CreateGrid(1, 6) 

     self.SetColLabelAlignment(wx.ALIGN_LEFT, wx.ALIGN_CENTRE) 
     self.SetColLabelValue(0, "Name") 
     self.SetColLabelValue(1, "Status") 
     self.SetColLabelValue(2, "") 
     self.SetColLabelValue(3, "File") 
     self.SetColLabelValue(4, "Last Action") 
     self.SetColLabelValue(5, "Other Info") 

frame = wx.Frame(None) 
panel = wx.Panel(frame) 
info_pane = InfoPane(panel) 

note_sizer = wx.BoxSizer() 
note_sizer.Add(info_pane, 1, wx.EXPAND) 

panel.SetSizerAndFit(note_sizer) 
frame.Show() 

app.MainLoop() 

그리드의 내용이 모두 보이도록 크기를 조정하고 싶습니다. 어떤 순간에 일어나는 것은 이것이다 :

screenie

(참고 : 편집 - 내가 더 단순화를 위해, 결과보고 동일 밖으로 노트북을했다)

아이디어? 감사!

+0

왜 창을 만들 때 확대하지 않으시겠습니까? frame = wx.Frame (None, size = (1000, 1000)) –

+0

앱이 올바른 크기로 시작되기를 원합니다. 너무 큽니다 : 그리드 주위에 끔찍한 공백이 많이 생깁니다 (예제 코드로 시도해보십시오. 나는 의미하는 것을 보게 될 것입니다). 너무 작 으면 스크롤바. – GreenAsJade

답변

1

당신이 그 아이의 크기 것입니다 프레임에 맞는 방법을 호출 할 때 프레임에 사이 저를 추가하는 경우.

#!/usr/bin/env python 

import wx 
import wx.grid 

app = wx.App(False) 


class InfoPane(wx.grid.Grid): 
    def __init__(self, parent): 
     wx.grid.Grid.__init__(self, parent) 

     # Set up the presentation 
     self.SetRowLabelSize(0) 
     self.CreateGrid(1, 6) 

     self.SetColLabelAlignment(wx.ALIGN_LEFT, wx.ALIGN_CENTRE) 
     self.SetColLabelValue(0, "Name") 
     self.SetColLabelValue(1, "Status") 
     self.SetColLabelValue(2, "") 
     self.SetColLabelValue(3, "File") 
     self.SetColLabelValue(4, "Last Action") 
     self.SetColLabelValue(5, "Other Info") 

frame = wx.Frame(None) 
panel = wx.Panel(frame) 
info_pane = InfoPane(panel) 

note_sizer = wx.BoxSizer() 
note_sizer.Add(info_pane, 1, wx.EXPAND) 

panel.SetSizer(note_sizer) 
frame_sizer = wx.BoxSizer(wx.VERTICAL) 
frame_sizer.Add(panel, 1, wx.EXPAND) 
frame.SetSizerAndFit(frame_sizer) 
frame.Show() 

app.MainLoop() 
+0

달콤한! 그게 내가 찾고 있던거야. 이 답변의 본질은 패널의 크기를 설정했지만 프레임은 설정하지 않고 크기를 조정해야하는 프레임입니까? – GreenAsJade

1

그리드의 크기를 가져 와서 상위 패널의 크기를 조정할 수 있습니다.

이 시도 :

panel.SetSizerAndFit(note_sizer) 
gridSize = info_pane.GetVirtualSize() 
frame.Show() 
panel.SetSize(gridSize) 
frame.Fit() 
+0

어떻게 작동하는지 알 수 있습니다. 감사! – GreenAsJade