如何解决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 条目的 proportion
和 flag
值覆盖或调整这些指令。
请始终牢记,同一 sizer 中的其他控件会受到影响,这可能会在演示中产生不良结果。
如果我们为该控件给 sizer 设置 wx.EXPAND
标志,它将显示整个小部件,同时保持 MinSize。在这种情况下,垂直展开它。
如果我们给 sizer 一个比例为 1,它会在 sizer 的方向上尽可能多地拉伸它,相对于共享该 sizer 的其他控件。
要了解发生了什么,最好使用这样的代码,更改 MinSize
、proportion
和 flags
,测试每个更改,直到 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()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。