Как подобрать размер панели, чтобы она соответствовала сетке

Вот самый простой пример того, что я могу сделать. Это сетка внутри панели:

#!/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()

Я хочу, чтобы все это имело такой размер, чтобы было видно все содержимое сетки. На данный момент происходит следующее:

экран

(примечание: редактировать - я вынул блокнот, для еще большего упрощения, результат тот же)

Идеи? Спасибо!


person GreenAsJade    schedule 11.02.2014    source источник
comment
почему бы не увеличить окно при его создании? кадр = wx.Frame (нет, размер = (1000,1000))   -  person Jerry_Y    schedule 11.02.2014
comment
Потому что я хочу, чтобы приложение запускалось в правильном размере. Слишком большой: много неприятных пробелов вокруг сетки (попробуйте это с примером кода, я думаю, вы поймете, что я имею в виду). Слишком маленький: полоса прокрутки.   -  person GreenAsJade    schedule 11.02.2014


Ответы (2)


Если вы добавите размер к фрейму, когда вы вызываете метод подгонки для фрейма, он будет соответствовать своим дочерним элементам.

#!/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()
person Yoriz    schedule 11.02.2014
comment
Милая! Это то, что я искал. Суть этого ответа в том, что я задавал размер панели, а не рамки, и именно рамке нужно было изменить размер? - person GreenAsJade; 11.02.2014

Вы можете получить размер сетки и изменить размер ее родительской панели.

Попробуй это:

panel.SetSizerAndFit(note_sizer)
gridSize = info_pane.GetVirtualSize()
frame.Show() 
panel.SetSize(gridSize)
frame.Fit()
person Jerry_Y    schedule 11.02.2014