【问题标题】:How to size a panel to fit a grid如何调整面板的大小以适合网格
【发布时间】:2014-02-11 11:45:57
【问题描述】:

这是我可以做的最简单的例子。它是面板内的网格:

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

我希望整个事物自行调整大小,以便网格的内容全部可见。目前发生的事情是这样的:

(注意:编辑——我把笔记本拿出来了,为了更简单,结果是一样的)

想法?谢谢!

【问题讨论】:

  • 创建窗口时为什么不放大窗口呢? frame = wx.Frame(None,size=(1000,1000))
  • 因为我希望应用程序以正确的大小启动。太大:网格周围有很多令人讨厌的空白(用示例代码试试,我想你会明白我的意思)。太小:滚动条。

标签: python wxpython sizer wxnotebook wxgrid


【解决方案1】:

如果您在框架上调用 fit 方法时向框架添加大小调整器,它将调整到其子级的大小。

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

【讨论】:

  • 甜蜜!这就是我一直在寻找的。这个答案的本质是我设置了面板的大小,而不是框架,而是需要调整大小的框架?
【解决方案2】:

您可以获取 Grid 的大小并使用它调整其父面板的大小。

试试这个:

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

【讨论】:

    猜你喜欢
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多