2014-02-11 8 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