【问题标题】:Prevent panels from overlapping in wxPython?防止面板在 wxPython 中重叠?
【发布时间】:2011-11-20 03:08:52
【问题描述】:

我刚刚开始使用 wxPython。我有以下代码:

import wx

class SASFrame(wx.Frame):
    def __init__(self,parent,id,title):

        wx.Frame.__init__(self,parent,id,title)
        groupPanel = wx.Panel(self)

        st = wx.StaticText(groupPanel, -1, "Which characteristics would you like to group by?")

        cbAge = wx.CheckBox(groupPanel, -1, "Age")
        cbMarket = wx.CheckBox(groupPanel,-1, "Market")

        groupSizer = wx.BoxSizer(wx.VERTICAL)
        groupSizer.AddMany([st,cbAge, cbMarket])
        groupPanel.SetSizer(groupSizer)

        summaryPanel = wx.Panel(self)

        st2 = wx.StaticText(summaryPanel, -1, "What would you like to summarize?")
        cbPremiums = wx.CheckBox(summaryPanel,-1, "Premiums")
        cbClaims = wx.CheckBox(summaryPanel,-1, "Claims")

        summarySizer = wx.BoxSizer(wx.VERTICAL)
        summarySizer.AddMany([st2,cbPremiums,cbClaims])
        summaryPanel.SetSizer(summarySizer)

        frameSizer = wx.BoxSizer(wx.VERTICAL)
        frameSizer.Add(groupPanel,1,wx.EXPAND)
        frameSizer.Add(summaryPanel,1,wx.EXPAND)

        self.SetSizer(frameSizer)

class SASApp(wx.App):
    def __init__(self):
        wx.App.__init__(self)
    def OnInit(self):
        self.frame = SASFrame(parent=None,id=-1,title="HCRFM Custom Report Generator")
        self.frame.Show()
        self.SetTopWindow(self.frame)
        return True

def main():
    app = SASApp()
    app.MainLoop()

if __name__ == '__main__':
    main()

当我调整窗口大小使其非常小时,它看起来像这样:

如何防止这种重叠?另外,我怎样才能使用户无法使窗口小到足以切断水平方向的文本?我不确定我是否应该担心后者。

【问题讨论】:

    标签: wxpython


    【解决方案1】:

    只需将您的行编辑为:

    self.SetSizerAndFit(frameSizer)
    

    它将完全按照您的预期运行。它将您的小部件布局到最小尺寸的窗口(如果/在您需要的地方添加边框或空格)并且它永远不会允许比这更小的窗口。 wx 文档中的更多信息:http://www.wxpython.org/docs/api/wx.Window-class.html#SetSizerAndFit

    【讨论】:

      【解决方案2】:

      我的做法是确定并修复窗口的最小尺寸,以防止不必要的小部件隐藏。我用wx.Window method:

      SetMinSize((x,y))
      

      wx.Window 还有一个alternative method:

      SetSizeHintsSz(self, minSize, maxSize=DefaultSize, incSize=DefaultSize)
      

      允许指定最小和最大窗口大小,以及窗口 大小增量。如果一对值未设置(或设置为 -1),则 将使用默认值。如果调用此函数,用户将 无法将窗口大小调整到给定范围之外(如果它是 顶级窗口。) Sizer 还将检查最小窗口大小 如果在计算布局时设置,将使用该值。

      调整大小的增量仅在 Motif 或 Xt 下显着。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-20
        • 1970-01-01
        • 1970-01-01
        • 2012-12-04
        • 1970-01-01
        相关资源
        最近更新 更多