python - 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
.
proportion
可以使用该控件的 sizer 条目的和flag
值覆盖或调整这些指令。请始终牢记,同一 sizer 中的其他控件将受到影响,这可能会在演示时产生不良结果。
如果我们为 sizerwx.EXPAND
提供该控件的标志,它将显示整个小部件,同时保持 MinSize。在这种情况下,垂直扩展它。
如果我们给 sizer 的比例为 1,它会在 sizer 的方向上尽可能多地拉伸它,相对于共享该 sizer 的其他控件。
要了解发生了什么,最好使用这样的代码,更改MinSize
和proportion
,flags
测试每个更改,直到sizer 的巫术变得不那么晦涩。
注意:此外,还可以测试重新调整窗口大小,以查看每种情况下会发生什么。
附加测试说明:
- 使用超过 1 个控件或小部件测试大小调整器
- 分配颜色以突出显示并不总是显而易见的内容。
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()
推荐阅读
- angular - 如何从 Angular 9 中的组件访问服务类中定义的变量?
- tensorflow - 这个张量流代码的 Pytorch sub 是什么?
- r - ggplot2在编织时不打印字体,但以块的形式显示
- git - GCP/JupyterHub 中的本地开发和远程部署
- java - 带有 @query 的 Spring 规范
- jdbc - Kafka-Connect JDBC Sink 在 upsert 期间报告 null id
- java - 在物理设备上成功启动活动后,应用程序会立即停止。NetworkOnMainThreadException
- mysql - SQL - 难以连接表和使用聚合函数的特定日期标准
- angular - 执行子组件Angular的一个功能
- android - Android 特定动画 Xamarin.Forms - 启动画面