如何以编程方式调整静态文本对象周围的边框?
How to adjust border around StaticText object programatically?
如何在给定 StaticText 对象的情况下以编程方式调整 StaticText 对象的边框?似乎有一个与此对象关联的 SizerItem,但我不知道如何找到它。
我看到 StaticText 对象有一个 GetBorder() 函数,但是这个函数 returns wx.NO_BORDER,所以它不是我要找的。
最小工作示例:
import wx
import wx.xrc
class MyFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(
self,
parent,
id=wx.ID_ANY,
title=wx.EmptyString,
pos=wx.DefaultPosition,
size=wx.Size(500, 300),
style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL,
)
self.SetSizeHints(wx.DefaultSize, wx.DefaultSize)
box_sizer = wx.BoxSizer(wx.VERTICAL)
labeled_box_sizer = wx.StaticBoxSizer(
wx.StaticBox(self, wx.ID_ANY, u"label"), wx.VERTICAL
)
self.m_text_top = wx.StaticText(
labeled_box_sizer.GetStaticBox(),
wx.ID_ANY,
u"Border = 0",
wx.DefaultPosition,
wx.DefaultSize,
0,
)
self.m_text_top.Wrap(-1)
labeled_box_sizer.Add(self.m_text_top, 0, wx.ALL, 0)
self.m_text_bottom = wx.StaticText(
labeled_box_sizer.GetStaticBox(),
wx.ID_ANY,
u"Border = 5",
wx.DefaultPosition,
wx.DefaultSize,
0,
)
self.m_text_bottom.Wrap(-1)
labeled_box_sizer.Add(self.m_text_bottom, 0, wx.ALL, 5)
box_sizer.Add(labeled_box_sizer, 0, wx.ALL, 5)
self.SetSizer(box_sizer)
self.Layout()
self.Centre(wx.BOTH)
def __del__(self):
pass
app = wx.App()
window = MyFrame(None)
window.Show()
text = window.m_text_top
# text.SetBorder(5) # <-- no such method exists
app.MainLoop()
我已经尝试了 GetSizer()
和 GetContainingSizer()
功能,但没有这样的运气。
您应该能够像这样获得 wx.SizerItem
:
item = text.GetContainingSizer().GetItem(text)
如果您只想保留对 sizer 项目的引用而不是每次都获取它,则在添加静态文本时它会从 sizer 的 Add
方法返回。
获得该项目后,您可以调整该项目的 sizer 特定属性。完成调整后,请务必调用 sizer 或包含小部件的 Layout
方法。
如何在给定 StaticText 对象的情况下以编程方式调整 StaticText 对象的边框?似乎有一个与此对象关联的 SizerItem,但我不知道如何找到它。
我看到 StaticText 对象有一个 GetBorder() 函数,但是这个函数 returns wx.NO_BORDER,所以它不是我要找的。
最小工作示例:
import wx
import wx.xrc
class MyFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(
self,
parent,
id=wx.ID_ANY,
title=wx.EmptyString,
pos=wx.DefaultPosition,
size=wx.Size(500, 300),
style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL,
)
self.SetSizeHints(wx.DefaultSize, wx.DefaultSize)
box_sizer = wx.BoxSizer(wx.VERTICAL)
labeled_box_sizer = wx.StaticBoxSizer(
wx.StaticBox(self, wx.ID_ANY, u"label"), wx.VERTICAL
)
self.m_text_top = wx.StaticText(
labeled_box_sizer.GetStaticBox(),
wx.ID_ANY,
u"Border = 0",
wx.DefaultPosition,
wx.DefaultSize,
0,
)
self.m_text_top.Wrap(-1)
labeled_box_sizer.Add(self.m_text_top, 0, wx.ALL, 0)
self.m_text_bottom = wx.StaticText(
labeled_box_sizer.GetStaticBox(),
wx.ID_ANY,
u"Border = 5",
wx.DefaultPosition,
wx.DefaultSize,
0,
)
self.m_text_bottom.Wrap(-1)
labeled_box_sizer.Add(self.m_text_bottom, 0, wx.ALL, 5)
box_sizer.Add(labeled_box_sizer, 0, wx.ALL, 5)
self.SetSizer(box_sizer)
self.Layout()
self.Centre(wx.BOTH)
def __del__(self):
pass
app = wx.App()
window = MyFrame(None)
window.Show()
text = window.m_text_top
# text.SetBorder(5) # <-- no such method exists
app.MainLoop()
我已经尝试了 GetSizer()
和 GetContainingSizer()
功能,但没有这样的运气。
您应该能够像这样获得 wx.SizerItem
:
item = text.GetContainingSizer().GetItem(text)
如果您只想保留对 sizer 项目的引用而不是每次都获取它,则在添加静态文本时它会从 sizer 的 Add
方法返回。
获得该项目后,您可以调整该项目的 sizer 特定属性。完成调整后,请务必调用 sizer 或包含小部件的 Layout
方法。