微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

wxPython SetMinSize 似乎明确设置大小,不允许窗口在需要时增长

如何解决wxPython SetMinSize 似乎明确设置大小,不允许窗口在需要时增长

考虑下面的代码。我创建了一个 StaticText,并在其上设置了最小尺寸。但是,StaticText 始终将此大小作为实际大小。即使文字不适合。我在这里做错了吗?

我想使用此功能来创建一个键值显示,其中值正确对齐,并且仅在需要时扩展 key 部分:

a key       - the value
another key - another value
a big key which does not fit - this value
the key     - the value
import wx


class TestPanel(wx.Panel):
    def __init__(self,parent):
        wx.Panel.__init__(self,parent)

        sizer = wx.BoxSizer()

        static_text = wx.StaticText(
            parent=self,label="a long label exceeding min size."
        )
        static_text.SetMinSize(wx.Size(50,-1))

        sizer.Add(static_text)
        self.SetSizer(sizer)


if __name__ == "__main__":
    app = wx.App()
    frm = wx.Frame(None,title="Test MinSize")
    pnl = TestPanel(frm)
    frm.Show()
    app.MainLoop()

解决方法

这可能不是你想听到的,但在这里。

sizer 在程序员希望显示数据和该数据的可变性质之间跳动。此外,它还必须应对我们称为 user 的讨厌的外部事物,他有调整窗口大小的习惯。

SetMinSize 是对 sizer 的指令,如果您愿意,可以提示它应该尝试自动执行的操作。大多数控件还将最小大小设置为控件构造函数中给定的大小,作为 best guess

可以使用该控件的 sizer 条目的 proportionflag 值覆盖或调整这些指令。 请始终牢记,同一 sizer 中的其他控件会受到影响,这可能会在演示中产生不良结果。

如果我们为该控件给 sizer 设置 wx.EXPAND 标志,它将显示整个小部件,同时保持 MinSize。在这种情况下,垂直展开它。

如果我们给 sizer 一个比例为 1,它会在 sizer 的方向上尽可能多地拉伸它,相对于共享该 sizer 的其他控件。

要了解发生了什么,最好使用这样的代码,更改 MinSizeproportionflags,测试每个更改,直到 sizer 的巫术变得稍微少一些晦涩难懂。

注意:此外,还要测试调整窗口大小,以查看每种情况下会发生什么。

其他测试说明:

  • 使用超过 1 个控件或小部件测试 sizer
  • 分配颜色以突出显示不总是很明显的内容。
import wx

class TestPanel(wx.Panel):
    def __init__(self,parent):
        wx.Panel.__init__(self,parent)

        sizer = wx.BoxSizer(wx.HORIZONTAL)

        static_text = wx.StaticText(
            parent=self,label="a long label exceeding min size.")
        static_text2 = wx.StaticText(self,label="another label")
        static_text.SetBackgroundColour('green')
        static_text.SetMinSize(wx.Size(50,-1))

        sizer.Add(static_text,proportion=1,flag=wx.ALL,border=0)
        sizer.Add(static_text2,wx.EXPAND,0)
        self.SetSizer(sizer)


if __name__ == "__main__":
    app = wx.App()
    frm = wx.Frame(None,title="Test MinSize",size=(300,100))
    pnl = TestPanel(frm)
    frm.Show()
    app.MainLoop()

以上代码示例:
enter image description here enter image description here

enter image description here enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。