wxPython SetMinSize 似乎明确设置大小,不允许 window 在需要时增长
wxPython SetMinSize seems to set size explicitly, not allows window to grow when needed
考虑下面的代码。我创建了一个 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
的讨厌的外部事物,它有调整 windows.
大小的习惯
SetMinSize 是给 sizer 的指令,如果您愿意,可以提示它应该尝试自动执行的操作。大多数控件还将最小大小设置为控件构造函数中给定的大小,如 best guess
.
可以使用该控件的 sizer 条目的 proportion
和 flag
值覆盖或调整这些指令。
请始终记住,同一 sizer 中的其他控件也会受到影响,这可能会在呈现时产生不良结果。
如果我们为 sizer 提供该控件的 wx.EXPAND
标志,它将显示整个小部件,同时保持 MinSize。在这种情况下,将其垂直展开。
如果我们将 sizer 的比例设置为 1,相对于共享该 sizer 的其他控件,它将在 sizer 的方向上尽可能多地拉伸它。
为了理解发生了什么,最好使用这样的代码,更改 MinSize
、proportion
和 flags
,测试每个更改,直到 sizer 的巫术变成稍微不那么晦涩。
注意:此外,还要测试调整 window 的大小,以查看每种情况下会发生什么。
附加测试说明:
- 使用超过 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, 0, 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()
以上代码的示例:
考虑下面的代码。我创建了一个 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
的讨厌的外部事物,它有调整 windows.
SetMinSize 是给 sizer 的指令,如果您愿意,可以提示它应该尝试自动执行的操作。大多数控件还将最小大小设置为控件构造函数中给定的大小,如 best guess
.
可以使用该控件的 sizer 条目的 proportion
和 flag
值覆盖或调整这些指令。
请始终记住,同一 sizer 中的其他控件也会受到影响,这可能会在呈现时产生不良结果。
如果我们为 sizer 提供该控件的 wx.EXPAND
标志,它将显示整个小部件,同时保持 MinSize。在这种情况下,将其垂直展开。
如果我们将 sizer 的比例设置为 1,相对于共享该 sizer 的其他控件,它将在 sizer 的方向上尽可能多地拉伸它。
为了理解发生了什么,最好使用这样的代码,更改 MinSize
、proportion
和 flags
,测试每个更改,直到 sizer 的巫术变成稍微不那么晦涩。
注意:此外,还要测试调整 window 的大小,以查看每种情况下会发生什么。
附加测试说明:
- 使用超过 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, 0, 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()
以上代码的示例: