【问题标题】:wxCollapsiblePane forces frame resizewxCollapsiblePane 强制调整框架大小
【发布时间】:2012-12-30 15:20:09
【问题描述】:

我在 wxFrame 中有一个 wxCollapsiblePane 和一个 wxGrid。每次我折叠或展开 wxCollapsiblePane 时,都会调整整个框架的大小。我想要的是让 wxGrid 增长和缩小,并使框架保持相同的大小。我还注意到,虽然我明确创建了大小为 500x500 的 wxFrame,但它实际上会缩小以适应其内容。我认为这与sizer有关,但我尝试过的任何事情似乎都不会影响这一点。谁能指出我哪里出错了?到目前为止,这是我的代码。

import wx
import wx.grid

class Frame(wx.Frame):

    def __init__(self, *args, **kwargs):
        super(Frame, self).__init__(*args, **kwargs)
        cpane = wx.CollapsiblePane(self)
        p = cpane.GetPane()
        sz = wx.BoxSizer()
        sz.Add(wx.TextCtrl(p), 1, wx.EXPAND)
        p.SetSizer(sz)

        sizer = wx.BoxSizer(wx.VERTICAL)
        self.grid = wx.grid.Grid(self)
        self.grid.CreateGrid(5, 5)

        sizer.Add(cpane, 0, wx.EXPAND)
        sizer.Add(self.grid, 1, wx.EXPAND)
        self.SetSizer(sizer)
        self.SetAutoLayout(1)
        sizer.Fit(self)
        self.Show()

app = wx.App(False)
win = Frame(None, size=(500, 500))
win.Show()
app.MainLoop()

【问题讨论】:

    标签: python user-interface layout wxpython wxwidgets


    【解决方案1】:

    为了不允许 CollapsiblePane 调整框架的大小,请在创建框架时使用 wx.CP_NO_TLW_RESIZE 样式。见http://docs.wxwidgets.org/trunk/classwx_collapsible_pane.html

    Fit() 调用是缩小框架以适应内容的原因。如果您不希望发生这种情况,则不需要它。并且代码中的 SetAutoLayout 调用是多余的,因为 SetSizer 会为您打开该属性。

    【讨论】:

    • 谢谢,我找到了一种解决方法,将所有小部件放在框架中的单个面板中,但这是一个更接近的解决方案。我想知道 SetAutoLayout,但我直接从官方文档中的示例中复制了它,好像它们可能已经过时了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 2020-07-05
    • 2014-05-22
    • 2014-03-17
    相关资源
    最近更新 更多